RU2473960C2 - Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array - Google Patents

Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array Download PDF

Info

Publication number
RU2473960C2
RU2473960C2 RU2010120949/08A RU2010120949A RU2473960C2 RU 2473960 C2 RU2473960 C2 RU 2473960C2 RU 2010120949/08 A RU2010120949/08 A RU 2010120949/08A RU 2010120949 A RU2010120949 A RU 2010120949A RU 2473960 C2 RU2473960 C2 RU 2473960C2
Authority
RU
Russia
Prior art keywords
sequence
maximum
end
beg
method
Prior art date
Application number
RU2010120949/08A
Other languages
Russian (ru)
Other versions
RU2010120949A (en
Inventor
Владимир Аронович Грузман
Александр Иванович Алчинов
Анатолий Витальевич Иванов
Original Assignee
Учреждение Российской академии наук Институт проблем управления им. В.А. Трапезникова РАН
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Учреждение Российской академии наук Институт проблем управления им. В.А. Трапезникова РАН filed Critical Учреждение Российской академии наук Институт проблем управления им. В.А. Трапезникова РАН
Priority to RU2010120949/08A priority Critical patent/RU2473960C2/en
Publication of RU2010120949A publication Critical patent/RU2010120949A/en
Application granted granted Critical
Publication of RU2473960C2 publication Critical patent/RU2473960C2/en

Links

Images

Abstract

FIELD: information technology.
SUBSTANCE: to find maximum sections in a finite sequence of characters x[i] (0≤i≤N) of a finite alphabet, which are repetitions of previously encountered sections, two bit arrays beg[i] and end[i] are created in computer memory. All elements of said bit arrays are populated with zeros. The sequence s1[i] is calculated for all N values of indices i, where s1[i] is the maximum length of the linear section of said data sequence. All said maximum sections are defined as all intervals x[m,n] for which the initial index m satisfies the condition s1[m]>sl[m-1]-1, and the final index n is equal to m+sl[m]-1, for which, for each value i, the fulfillment of the condition s1[i]>sl[i-1]-1 is checked, and if the condition is met, values beg[i]=1 and end[i+s1[i]]=1 are set in the bit arrays beg[i] and end[i]. The set of all said maximum sections is recovered on the two bit arrays beg[i] and end[i].
EFFECT: reduced amount of memory required to display all maximum repeating sections.
3 cl, 2 dwg

Description

Изобретение относится к компьютерной обработке цифровых данных, точнее к способам сжатия массивов цифровой информации путем нахождения совпадающих фрагментов последовательности данных. The invention relates to computer processing digital data, more particularly to methods for compression of digital information array by finding overlapping sequences the fragments of data. Изобретение может быть использовано для нахождения максимальных повторяющихся фрагментов в последовательностях цифровых данных при компьютерной обработке цифровых данных, например, с целью сжатия файлов. The invention can be used to find the maximum repeating units in sequences of digital data with computer processing of digital data, for example, to compress the file.

Как указано в описании патента США 6400289 (раздел «Уровень техники»), существует три типа способов сжатия последовательности цифровых данных без потери информации, а именно статистическое кодирование, словарное кодирование и грамматическое кодирование. As described in U.S. Patent 6400289 ( "PRIOR ART" section), there are three types of compression techniques a sequence of digital data without loss of information, namely entropy coding, dictionary coding, and grammatical coding. Наиболее известными алгоритмами словарного кодирования являются алгоритмы Лемпеля-Зива и их варианты. The best-known algorithms of dictionary coding are Lempel-Ziv algorithms and their variants. Методы словарного кодирования обеспечивают сжатие информации за счет использования избыточности данных через некоторый механизм сопоставления строк еще не закодированных данных с данными, которые уже закодированы. dictionary coding techniques provide data compression by the use of data redundancy through some mechanism for matching strings is not yet encoded data with the data that is already encoded. При этом объем вспомогательных данных, необходимых для организации эффективного поиска совпадений еще не закодированных данных с уже закодированными данными, может в несколько раз превышать объем собственно закодированных данных. The volume of the auxiliary data required for efficient search for matches not yet encoded data already encoded data may be several times the amount of the actual encoded data. В случае сжатия очень больших файлов это приводит к тому, что область поиска приходится ограничивать только самыми последними закодированными данными, используя так называемое скользящее окно поиска, длина которого может составлять десятки или сотни килобайт. In the case of compression of very large files, this leads to the fact that the search area has to be confined to the most recent data encoded using the so-called moving the search box, the length of which can be tens or hundreds of kilobytes. Различные варианты такого поиска приведены в следующих патентах. Various embodiments of such a search are shown in the following patents.

В патенте США 4464650 (п.123 формулы в части сжатия) предложен способ сжатия цифровых данных, в котором разбивают последовательность данных на отрезки, каждый из которых включает в себя префикс и следующий за этим префиксом символ. U.S. Patent 4464650 (p.123 formula compression portion) is provided a method of compressing digital data, wherein the data sequence is divided into segments, each of which includes prefix and prefix following this symbol. Префикс представляет собой самое длинное совпадение с более ранним отрезком, причем указанное разбиение определяет дерево поиска, имеющее узлы и ветви, выходящие из указанных узлов. The prefix is ​​the longest match with the earlier segment, said partition defines a search tree having nodes and branches emanating from said nodes. Каждый узел имеет самое большее одну входящую ветвь. Each node has at most one incoming branch. Выходящие из узла ветви представляют соответствующие символы указанного алфавита, узлы имеют соответствующие связанные с ними метки и адреса, причем дерево поиска имеет единственный коревой узел без входящих ветвей и листовые узлы без выходящих ветвей. Exiting the site branches represent the respective symbols of said alphabet, nodes have appropriate labels and addresses, and search tree associated with them is the only measles node without incoming branches and leaf nodes with no outgoing branches. При этом каждому узлу дерева приписывается виртуальный адрес, соответствующий номеру данного узла дерева в полном дереве поиска, частью которого является указанное дерево. In this case, each node of the tree is attributed to the virtual address corresponding to the number of the tree node in the full tree research, part of which is above the tree. Меткой узла является порядковый номер появления узла в дереве в процессе его построения. Tagged node is the serial number of occurrence node in the tree, in the process of its construction. Таблица меток является массивом F, выдающим для каждого виртуального адреса метку узла, приписанную узлу с этим виртуальным адресом. Table is an array of labels F, issuing for each node a virtual address tag, node ascribed to this virtual address. Поскольку в общем случае имеется намного больше адресов, чем меток, большая часть таблицы меток является пустой, и для экономного хранения используют хеширование части массива с большими адресами. Since in general, there is much more addresses than labels, most labels of the table is empty and is used for storage of economical hashing portion with large array addresses. Таким образом, метка может записываться прямо в массив F по самому виртуальному адресу, или виртуальные адреса могут использоваться как входной ключ к хеш-функции, которая вычисляет реальный адрес в F, по которому записывается метка. Thus, the label can be written directly to the array F on to the virtual address, or virtual address may be used as the input key to the hash function that calculates a real address in F, at which the mark is recorded. Память, выделенная для меток узлов в массиве F, разбивается в начале кодирования на прямую и хешированную части. Memory allocated for labels of nodes in the array F is broken at the beginning of coding and hashed line portion. При этом начальная (верхняя) часть таблицы меток F записывается прямо, чтобы сэкономить время, поскольку обращение к ней происходит часто. The initial (upper) part of the label of the table F is written directly to save time, because the reference to it occurs frequently. Более поздние части таблицы меток хешируются, чтобы сэкономить память, поскольку обращение к ним происходит реже. The later part of the label tables are hashed to save memory, because an appeal to them less often. Для обратного преобразования используется таблица адресов - массив G, выдающий для каждой метки узла виртуальный адрес узла. To convert the address table is used - an array of G, issuing a label for each node a virtual node address. Массив G является обратным к массиву F и для каждой метки узла содержит приписанный ему виртуальный адрес. Array G is the inverse of the array F and for each node label contains assigned him a virtual address. Поскольку таблица адресов G имеет размер, равный числу внутренних узлов, она не требует хеширования. Since the table address G has a size equal to the number of internal nodes, it does not require hashing.

Как указано в абзаце 2 колонки 22 описания патента США 4464650, в программной реализации этого способа секция 4 программы кодирования выполняет корректировку дерева поиска до тех пор, пока не будет достигнут максимальный размер дерева КМ. As indicated in paragraph 2 of column 22 of U.S. Patent 4,464,650 describe, in a software implementation of this process section 4 performs correction encoding program search tree until until it reaches the maximum size tree CM. Данная программа сохраняет дерево в статическом состоянии, когда исчерпана выделенная память. This program keeps the tree in a static state, when exhausted allocated memory. В другом варианте память под дерево поиска может быть освобождена и начат рост нового дерева. In another embodiment, the memory of a search tree can be released and initiated a new tree growth. Счетчик К внутренних узлов увеличивается, и метка К внутреннего узла записывается по надлежащему адресу в массив таблицы меток F. Таким образом, недостатком этого способа является ограниченная длина поиска. To counter the internal nodes increases, and the mark K of the internal node is recorded in the proper address in the tag array table F. Thus, the disadvantage of this process is the limited length of the search.

В патенте США 4558302 (п.107 формулы изобретения) предложен способ сжатия потока сигналов символов данных в сжатый поток кодовых сигналов, содержащий шаги: U.S. Patent No. 4558302 (claims, p.107) discloses compression signal stream of data symbols into a compressed stream of code signals, comprising the steps of:

запись в ячейки памяти строк сигналов символов данных, встречающихся в указанном потоке, где записанные строки имеют связанные с ними сигналы кодов, указанные ячейки памяти доступны по множеству сигналов адресов, каждая из строк сигналов символов данных включает в себя префиксную строку сигналов символов данных и сигнал символов расширения, причем префиксная строка соответствует строке, записанной в указанной памяти; Entry cell line memory data symbol signals occurring in said stream, wherein the recorded lines have associated signals codes specified memory location accessible by the address signal set, each of the rows of data symbol signals comprises a prefix string of data character signals and a character signal extension, wherein the prefix string corresponds to a row stored in said memory;

поиск в указанном потоке сигналов символов данных путем сравнения указанного потока с указанными записанными в память строками, чтобы определить самое длинное соответствие между ними; searching said stream of data characters by comparing said signals with said flow recorded in the memory strings to determine the longest match therebetween;

вставка в указанную память для хранения в ней расширенной строки, включающей в себя указанное самое длинное соответствие с указанным потоком данных, продолженной следующим сигналом символа данных, следующим за указанным самым длинным соответствием; inserting into said memory for storing therein the extended string comprising said longest match with said stream of data following the extended signal data symbols following said longest match;

назначение кодового сигнала, соответствующего указанной расширенной строке; assignment of the code signal corresponding to said extended string;

выдача кодового сигнала, связанного с указанным самым длинным соответствием, для получения указанного сжатого потока кодовых сигналов. issuing a code signal associated with said longest match, to obtain said compressed stream of code signals.

Как указано в абзаце 2 колонки 7 описания США 4558302, данный способ использует ограниченную длину поиска, т.е. As indicated in paragraph 2 of the column 7 description US 4558302, the present method uses a limited length of the search, i.e., ему присущ тот же недостаток, что и предыдущему способу. it has the same deficiencies as the previous method.

В патенте США 4906991 предложен способ сжатия цифровых данных, в котором для поиска совпадающих фрагментов используются дерево поиска и скользящее окно поиска, причем согласно абзацу 1 колонки 25 описания максимальный размер окна может выбираться в пределах от 1000 до 63000. При этом реализация дерева поиска в виде так называемого суффиксного дерева позволяет провести весь поиск за время, линейно зависящее от длины массива цифровых данных. U.S. Patent 4906991 provides a method for compressing digital data, wherein the search for matching fragments used search tree and moving the search window according to paragraph 1 wherein columns 25 describe the maximum window size may be selected in the range from 1000 to 63000. The realization of a search tree the so-called suffix tree allows you to spend the whole search for the time linearly dependent on the length of an array of digital data.

В патенте США 6292115 предложен способ реализации дерева поиска в виде словаря кодовых слов, причем подробно описаны несколько вариантов словаря, содержащего 1024 кодовых слова, и отмечено, что словарь может содержать и 512, 2048, 4096 или больше кодовых слов (колонка 7 описания, 3-й абзац снизу). U.S. Patent 6292115 provides a method for implementing a search tree as a dictionary of codewords, and are described in detail several embodiments dictionary containing 1024 codewords, and it is noted that the dictionary may contain 512, 2048, 4096 or more codewords (column 7 descriptions 3 th paragraph below).

Все вышеуказанные способы реализуются так называемыми «жадными» алгоритмами, когда каждый раз при кодировании оставшейся незакодированной части последовательности данных в ней производится поиск максимального фрагмента, совпадающего с некоторым фрагментом уже закодированной части данных и начинающегося с начала оставшейся незакодированной части. All the above methods are implemented so-called "greedy" algorithms that every time when encoding of the remaining uncoded data sequence it searches for the maximum fragment coincides with a fragment of the already encoded data, and starts from the beginning of the remaining uncoded. Недостатком этих способов является то, они не позволяют находить ситуации, когда более предпочтительной является добавление литерала, хотя существует длинный повторяющийся фрагмент, начинающийся непосредственно с начала оставшейся незакодированной части. The disadvantage of these methods is that they do not allow us to find a situation where the more preferred is the addition of a literal, although there is a long loop which, starting directly from the beginning of the remaining uncoded. Пример такой ситуации показан на фиг.1. An example of such a situation is shown in Figure 1. На этой фигуре горизонтальной прямой условно показана строка данных, заштрихованная часть 1 которой уже закодирована. In this figure, the horizontal line shows the data conditionally line hatched part 1 which is already encoded. Сверху и снизу от этой прямой длинными узкими прямоугольниками показаны максимальные фрагменты, совпадающие с некоторыми фрагментами в уже закодированной части. Above and below this line long narrow rectangles show the maximum fragments, coinciding with some fragments of an already coded parts.

Символами "а" и "b" показаны реальные символы "а" и "b", присутствующие в строке данных. The symbols "a" and "b" shows the actual characters "a" and "b", are present in the data string. Позиции 2, 3, 4 указывают на фрагменты, выделяемые «жадным» алгоритмом. Position 2, 3, 4 indicate the fragments allocated to "greedy" algorithm. Позиции 5 и 6 указывают на другие максимальные фрагменты, совпадающие с некоторыми фрагментами в уже закодированной части. Positions 5 and 6 indicate the different maximum fragments, coinciding with some fragments of an already coded parts. «Жадный» алгоритм кодирования предложит закодировать оставшуюся незакодированной часть последовательности путем кодирования фрагментов 2, 3 и 4 как копий ранее частей ранее закодированной начальной части 1 последовательности. "Greedy" encoding algorithm to encode the remaining unencoded offer portion coding sequence by fragments 2, 3 and 4 copies of both parts previously previously encoded part 1 initial sequence. В то же время имеется возможность закодировать оставшуюся незакодированной часть последовательности путем кодирования символов "а" и "b" в виде литералов и фрагментов 5 и 4 в виде копий частей ранее закодированной начальной части 1 последовательности. At the same time it is possible to encode the remaining part of the sequence of unencoded symbols by encoding "a" and "b" as literals and fragments of 5 and 4 in the form of copies of parts previously encoded part 1 initial sequence. Таким образом, вместо двух копий фрагментов последовательности можно использовать одну копию фрагмента и два литерала. Thus, instead of two copies of the fragment one copy of a sequence fragment can be used and two literals. В большинстве схем кодирования типа Лемпеля-Зива второй вариант является более экономным. In most coding schemes Lempel-Ziv-type second embodiment is more economical. Тем самым предпочтительно использовать «нежадные» алгоритмы кодирования. Thus preferable to use "non-greedy" coding algorithms.

В патенте США 5883588 (описание второй реализации изобретения) предложена модификация этого подхода, не являющаяся «жадной». U.S. Patent 5883588 (the description of the second embodiment of the invention) A modification of this approach which is not a "greedy". При кодировании последовательности данных x(i) после того как закодирована строка из первых s-1 символов, находят самое длинную подстроку x(s), … x(s+j), совпадающую с ранее закодированными данными, и если она является недостаточно длинной, то находят самую длинную совпадающую подстроку x(s+1), … x(s+j′) символов из подстрок символов, начинающихся с символа x(s+1). When coding the data sequence x (i) after the encrypted string of the first s-1 symbols are the longest substring of x (s), ... x (s + j), coinciding with the previously encoded data, and if it is not sufficiently long, then find the longest matching substring x (s + 1), ... x (s + j ') character substring of characters starting with the character x (s + 1). Сравнивают длину совпадения j с длиной совпадения j′, и если j′ больше, то x(s) кодируют в режиме литерала, ax(s+1), … x(s+j′) кодируют в режиме копирования. J is compared with the coincidence length match length j ', and if j' more, x (s) encoded in the literal mode, ax (s + 1), ... x (s + j ') is encoded in the copy mode. С другой стороны, когда длина совпадения j больше или равна длине совпадения j′, то x(s), … x(s+j) кодируют в режиме копирования. On the other hand, when the overlap length j is greater than or equal to the length of coincidence j ', then x (s), ... x (s + j) is encoded in the copy mode. Далее процесс переходит к кодированию строк символов, начинающихся соответственно с x(s+j′+1) или с x(s+j+1). Next, the process proceeds to the encoding of character strings respectively starting with x (s + j '+ 1) or x (s + j + 1). Недостатком этого способа является то, что он обеспечивает выявление литералов только длиной в один символ, т.е. A disadvantage of this method is that it provides detection of literals only one symbol length, i.e., отличается от «жадного» способа весьма незначительно. differs from the "greedy" method is very low.

В патенте США 6226628 (п.1 формулы изобретения) предложен способ предобработки файла данных для последующего сжатия, где файл данных имеет множество упорядоченных элементов данных, где соответствующие элементы данных начинают строки разных длин, включающий в себя: U.S. Patent No. 6226628 (claim 1) provides a method for preprocessing data file for subsequent compression, where image data has a plurality of ordered data elements, wherein respective data elements begin rows of different lengths, comprising:

создание множества указателей смещений для разных длин совпадений, где указатели смещения для определенной длины совпадения указывают смещения от соответствующих элементов данных до предыдущих строк этой длины совпадения, которые совпадают со строками этой длины совпадения, начинающимися с соответствующих элементов данных; creating a plurality of pointers offsets for different lengths of coincidence where the offset pointers for a particular length of overlap point offset from the corresponding data element previous to this row overlap length that coincide with lines of the match length, starting from the corresponding data elements;

запоминание индексов смещений в ассоциации с файлом данных. storing index offset in association with the data file.

Как видно из фиг.6 и соответствующего описания в патенте США 6226628, объем данных, необходимых для хранения таких указателей, в несколько раз превышает объем исходного файла, что делает возможным применение этого способа только для файлов умеренного объема или только на очень мощных серверах. As seen in Figure 6 and the corresponding description in U.S. Patent No. 6,226,628, the amount of data required to store such pointers is several times the volume of the original file, which makes it possible to use this method only for moderate volume files or only a very powerful servers.

Исходя из изложенного, актуальной является разработка способа нахождения всех максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, который требовал бы дополнительную память для размещения результата, объем которой не превосходит объема исходной последовательности данных. Based on the above, relevant to provide a method for finding all maximal portions in the final symbol sequence x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, which would require extra storage to hold the result, the amount of which does not exceed the volume original data sequence.

При этом в обоих способах достигается технический результат, состоящий в уменьшении количества памяти, требующейся для представления всех максимальных повторяющихся участков, до 2N бит (N/4 байт, т.е. ¼ от объема исходной последовательности). In both methods achieved technical result consists in reducing the amount of memory required to represent all maximal repetitive portions to 2N bits (N / 4 bytes, i.e., ¼ of the volume of the original sequence).

Первый способ нахождения всех максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, двумя битовыми массивами памяти, каждый из которых имеет длину N/8, состоит в том, что: The first method of finding all maximal portions in a finite sequence of symbols x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, two bit memory arrays, each of which has N / 8 length, consists in the fact that:

создают в памяти компьютера два битовых массива beg[i] и end[i] (0≤i<N); create a two bit beg computer memory array [i] and end [i] (0≤i <N);

заполняют все элементы указанных битовых массивов нулями; fill all the elements of said arrays of bit zeros;

вычисляют последовательность s 1 [i] по всем N значениям индексов i (0≤i<N), где s 1 [i] - максимальная длина линейного участка указанной последовательности данных, индекс начального элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], начало которого расположено ближе к началу последовательности данных x[i], чем начало указанного линейного участка, calculating a sequence of 1 s [i] for all values of N indices i (0≤i <N), where s 1 [i] - the maximum length of linear portion of said sequence of data, the index entry item coincides with a given index i, coinciding with some other in the same portion of the data sequence x [i], the beginning of which is arranged closer to the beginning of the data sequence x [i], than the beginning of said linear portion,

определяют все указанные максимальные участки как все отрезки x[m,n] последовательности x[i], для которых начальный индекс m удовлетворяет условию s 1 [m]>s 1 [m-1]-11, а конечный индекс n равен m+s 1 [m]-1, для чего для каждого значения i проверяют выполнение условия s 1 [i]>s 1 [i-1]-1, и в случае выполнения этого условия устанавливают в битовых массивах beg[i] и end[i] значения beg[i]=1 и end[i+s 1 [i]]=1; determine all portions of said maximum all the segments x [m, n] sequence x [i], for which the starting index m satisfies 1 s [m]> s 1 [m-1] -11, and the final index n is equal to m + s 1 [m] -1, for which for each value of i is checked to satisfy the condition 1 s [i]> 1 s [i-1] -1 and, if this condition is set in the bit arrays beg [i] and end [ i] values beg [i] = 1 and end [i + s 1 [i]] = 1;

совокупность всех указанных максимальных участков восстанавливают по двум битовым массивам beg[i] и end[i], где единичное значение i-го элемента означает, что i-я позиция в указанной последовательности является, соответственно, началом и концом некоторого максимального указанного участка. the aggregate of all of said portions of maximum reduced by two bit arrays beg [i] and end [i], where a single value i-th element means that the i-position in said sequence is, respectively, the beginning and end of some maximum specified portion.

Второй способ нахождения всех максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, двумя битовыми массивами памяти, каждый из которых имеет длину N/8, состоит в том, что The second method of finding the maximum of all areas in the final symbol sequence x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, two bit memory arrays, each of which has a length of N / 8, is that

создают в памяти компьютера два битовых массива beg[i] и end[i] (0≤i<N); create a two bit beg computer memory array [i] and end [i] (0≤i <N);

заполняют все элементы указанных битовых массивов нулями; fill all the elements of said arrays of bit zeros;

вычисляют последовательность s 2 [i] по всем N значениям индексов i (0≤i<N), где s 2 [i] - максимальная длина линейного участка указанной последовательности данных, индекс конечного элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], конец которого расположен ближе к началу последовательности данных x[i], чем конец указанного линейного участка, calculating a sequence of s 2 [i] for all values of N indices i (0≤i <N), where s 2 [i] - the maximum length of linear portion of said data sequence index of the final element of which coincides with the index i, coinciding with some other in the same portion of the data sequence x [i], the end of which is located closer to the top of the data sequence x [i], than the end of said linear portion,

определяют все указанные максимальные участки как все отрезки x[m,n] последовательности x[i], для которых конечный индекс n удовлетворяет условию s 2 [n]>s 2 [n+1]-1, а начальный индекс n равен ns 2 [n]+1, для чего для каждого значения i проверяют выполнение условия s 2 [i]>s 2 [i+1]-1, и в случае выполнения этого условия устанавливают в битовых массивах beg[i] и end[i] значения end[i]=1 и beg[is 2 [i]+1]=1; determine all portions of said maximum all the segments x [m, n] x sequence [i], for which the final index n meets the condition s 2 [n]> s 2 [n + 1] -1 and the initial index n is equal to 2 ns [n] +1, then for each value i is checked that condition s 2 [i]> s 2 [i + 1] -1 and, if this condition is set in the bit arrays beg [i] and end [i] values end [i] = 1 and beg [is 2 [i] +1] = 1;

совокупность всех указанных максимальных участков восстанавливают по двум битовым массивам beg[i] и end[i], где единичное значение i-го элемента означает, что i-я позиция в указанной последовательности является, соответственно, началом и концом некоторого максимального указанного участка. the aggregate of all of said portions of maximum reduced by two bit arrays beg [i] and end [i], where a single value i-th element means that the i-position in said sequence is, respectively, the beginning and end of some maximum specified portion.

Изобретение поясняется графическими материалами. The invention is explained by graphic materials.

Фиг.1. 1. Пример неоптимальности «жадного» алгоритма. EXAMPLE nonoptimality "greedy" algorithm.

Фиг.2. 2. Типичный вид графика функции s 1 [i]. Typical appearance of the graph of 1 s [i].

Осуществление изобретения EMBODIMENTS

1. Основные понятия 1. Basic concepts

Прежде чем перейти к подробному описанию осуществления вышеизложенных способов, необходимо ввести некоторые понятия, связанные с поиском повторяющихся фрагментов в последовательности символов. Before proceeding to a detailed description of the foregoing methods, it is necessary to introduce some concepts related to the search of repeating units in a sequence of characters. Для заданной последовательности символов x[i] (0≤i<N) конечного алфавита через х[m,n] (0≤m≤n<N) обозначим последовательность символов x[m], х[m+1], …,х[n]. For a given symbol sequence x [i] (0≤i <N) finite alphabet by x [m, n] (0≤m≤n <N) denote symbol sequence x [m], x [m + 1], ..., x [n]. Поиск повторяющихся фрагментов в заданной последовательности символов x[i] (0≤i<N) конечного алфавита можно производить путем прохождения последовательности символов x[i] в двух направлениях: вперед и назад. Search repeating units in a predetermined sequence of symbols x [i] (0≤i <N) finite alphabet can be produced by passing the symbol sequence x [i] in two directions: forward and backward. В первом случае последовательность символов x[i] рассматривают в порядке возрастания значений индекса i: x[0], x[1], …, x[N-1]. In the first case, the sequence of symbols x [i] is considered in order of increasing values ​​of the index i: x [0], x [1], ..., x [N-1]. Во втором случае последовательность символов x[i] рассматривают в порядке убывания значений индекса i: x[N-1], x[N-2], …, x[0]. In the second case, the sequence of symbols x [i] is considered in order of decreasing values ​​of the index i: x [N-1], x [N-2], ..., x [0].

В случае прохождения последовательности вперед для заданного фрагмента х[m,n] (0≤m≤n<N) производят поиск фрагментов x[md,nd] (d>0), совпадающих с фрагментом х[m,n], т.е. In the case of passing forward to a predetermined sequence fragment x [m, n] (0≤m≤n <N) is searched fragments x [md, nd] (d> 0) matching with the fragment x [m, n], t. e. пытаются найти такое d>0, что x[i]=x[id] для всех i, где m≤i≤n. trying to find a d> 0 such that x [i] = x [id] for all i, where m≤i≤n. В случае прохождения последовательности назад для заданного фрагмента х[m,n] (0≤m≤n<N) производят поиск фрагментов x[m+d,n+d] (d>0), совпадающих с фрагментом х[m,n], т.е. In case of passing the specified sequence back to fragment x [m, n] (0≤m≤n <N) is searched fragments x [m + d, n + d] (d> 0) matching with the fragment x [m, n ] i.e. пытаются найти такое d>0, что x[i]-x[i+d] для всех i, где m≤i≤n. trying to find a d> 0 such that x [i] -x [i + d] for all i, where m≤i≤n. Другими словами, при любом порядке прохождения последовательности для фрагмента х[m,n] пытаются найти совпадающий с ним фрагмент х[m 1 ,n 1 ], расположенный в уже пройденной части последовательности. In other words, in any order of passage for the fragment sequence x [m, n] coincides with trying to find them moiety x [m 1, n 1], located in the already traversed part of the sequence. В этом случае независимо от направления прохождения последовательности такой фрагмент x[m 1 ,n 1 ] будем называть предыдущим появлением фрагмента х[m,n]. In this case, regardless of the direction of the sequence of a fragment of x [m 1, n 1] will be called the previous appearance fragment x [m, n].

Информация о том, для каких фрагментов х[m,n] существует предыдущее появление, представляет значительный интерес для исследования избыточности информации в заданной последовательности символов и для ее сжатия, поскольку наличие предыдущего появления для заданного фрагмента х[m,n] говорит о том, что весь этот фрагмент может быть задан всего тремя числами: границами m, n и смещением данного фрагмента относительно его предыдущего появления. Information on how to any fragments x [m, n] exists previous appearance, is of considerable interest for the study of information redundancy in the predetermined sequence of symbols and to its compression, since the presence of the previous occurrence for a given fragment x [m, n] indicates that the entire fragment may be defined by only three numbers: boundaries m, n and the displacement of the fragment with respect to its previous appearance. В то же время возможно задание такой информации, не требующее двумерного массива. At the same time possible to set such information without requiring a two-dimensional array. Определим две функции We define two functions

s 1 [i]=max{0≤j<Ni| 1 s [i] = max {0≤j < Ni | для x[i,i+j] существует предыдущее появление}, for x [i, i + j] exists previous appearance}

s 2 [i]=max{0≤j<Ni| s 2 [i] = max {0≤j < Ni | для x[ij,i] существует предыдущее появление}. for x [ij, i]} exists previous appearance.

Другими словами, s 1 [i] - максимальная длина линейного участка указанной последовательности данных, индекс начального элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], начальный элемент которого расположен ближе к началу прохождения последовательности данных x[i], чем начальный элемент указанного линейного участка. In other words, s 1 [i] - the maximum length of linear portion of said sequence of data, the index entry item coincides with a given index i, coinciding with some other portion of the same x data sequence [i], the starting element which is located closer to the top of the passage sequence data x [i], than the initial element of said linear portion. Аналогично, s 2 [i] - максимальная длина линейного участка указанной последовательности данных, индекс конечного элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], начальный элемент которого расположен ближе к началу прохождения последовательности данных x[i], чем начальный элемент указанного линейного участка. Similarly, s 2 [i] - the maximum length of linear portion of said data sequence index of the final element of which coincides with the index i, coinciding with some other portion of the same data sequence x [i], the starting element which is located closer to the top transmission data sequence x [i], than the initial element of said linear portion.

Очевидно, что для фрагмента х[m,n] существует предыдущее появление тогда и только тогда, когда nm≤s 1 [m]. Obviously, to fragment x [m, n] previous appearance exists if and only if nm≤s 1 [m]. Таким образом, знание функции s 1 [i] позволяет для любого фрагмента х[m,n] сразу сказать, существует ли для него предыдущее появление. Thus, knowledge of the function 1 s [i] to allow any fragment x [m, n] immediately tell whether there is previous appearance to him.

Отметим следующие важнейшие свойства функции s 1 [i]: Note the following important properties of the function 1 s [i]:

А1. A1. s 1 [i+1]≥s 1 [i]-1 (см. фиг.2). 1 s [i + 1] ≥s 1 [i] -1 (see FIG. 2). В самом деле, пусть s 1 [i]=s. In fact, let s 1 [i] = s. Тогда по определению для фрагмента x[i,i+s] существует предыдущее появление, т.е. Then, by the definition for the fragment x [i, i + s] exists previous appearance, i.e. найдется такое Δ, что x[i,i+s] совпадает с x[i+Δ,i+s+Δ], где Δ<0 в случае прохождения последовательности данных x[i] вперед и Δ<0 в случае прохождения последовательности данных x[i] назад. there exists Δ, that x [i, i + s] coincides with x [i + Δ, i + s + Δ], where Δ <0 in the case of passing the x data sequence [i] forward and Δ <0 in the case of passing sequence data x [i] before. Тем более x[i+1,i+s] совпадает с x[i+1+Δ,i+s+Δ], причем x[i+1,i+s]=x[i+1,i+1+(s-1)] и x[i+1+Δ,i+s+Δ]=x[i+1+Δ,i+1+(s-1)+Δ]. Especially x [i + 1, i + s] coincides with x [i + 1 + Δ, i + s + Δ], where x [i + 1, i + s] = x [i + 1, i + 1 + (s-1)] and x [i + 1 + Δ, i + s + Δ] = x [i + 1 + Δ, i + 1 + (s-1) + Δ]. Следовательно, для фрагмента x[i+1,i+1+(s-1)] существует предыдущее появление, откуда по определению s 1 [i+1]≥s-1. Consequently, for the fragment x [i + 1, i + 1 + (s-1)] there is previous appearance, where by definition 1 s [i + 1] ≥s-1.

Б1. B1. Для m>0 фрагмент х[m,n] является максимальным фрагментом, для которого существует предыдущее появление, тогда и только тогда, когда n=m+s 1 [m] и s 1 [m]>s 1 [m-1]-1. For m> 0 fragment x [m, n] is the maximum fragment for which there exists a previous appearance, if and only if n = m + s 1 [m] and s 1 [m]> s 1 [m-1] -one. В самом деле, пусть х[m,n] - максимальный фрагмент, для которого существует предыдущее появление. In fact, let x [m, n] - the maximum fragment for which there is a previous appearance. Тогда х[m,n]=х[m,m+(nm)] является максимальным фрагментом, для которого существует предыдущее появление, откуда по определению s 1 [m]=nm, т.е. Then, x [m, n] = x [m, m + (nm) ] is the maximum fragment for which there exists a previous appearance, where by definition 1 s [m] = nm, i.e. n=m+s 1 [m]. n = m + s 1 [m]. Кроме того, поскольку фрагмент х[m-1,n] строго содержит фрагмент х[m,n], являющийся максимальным фрагментом, для которого существует предыдущее появление, то для фрагмента х[m-1,n]=х[m-1,m-1+(n-m+1)] уже не существует предыдущего появления. Furthermore, since the fragment x [m-1, n] strictly contains fragment x [m, n], which is the maximum fragment for which there exists a previous appearance, then the fragment x [m-1, n] = x [m-1 , m-1 + (n-m + 1)] does not exist any preceding arrives. Следовательно, n-m+1>s 1 [m-1]. Consequently, n-m + 1> s 1 [m-1]. Таким образом, s 1 [m-1]-1<nm, причем уже доказано, что nm=s 1 [m], т.e. Hence, s 1 [m-1] -1 <nm, which has been proved that 1 nm = s [m], i.e., s 1 [m-1]-1<s 1 [m]. s 1 [m-1] -1 <s 1 [m].

Обратно, пусть n=m+s 1 [m] и s 1 [m]>s 1 [m-1]-1. Conversely, assume that n = m + s 1 [m] 1 and s [m]> s 1 [m-1] 1. Предположим, что фрагмент х[m,n] содержится во фрагменте x[m 1 ,n 1 ], для которого также существует предыдущее появление. Assume that the fragment x [m, n] is contained in a fragment x [m 1, n 1], which is also a previous appearance. Если m 1 <m, то фрагмент x[m 1 ,n 1 ] содержит фрагмент х[m-1,n], откуда для фрагмента х[m-1,n] также существует предыдущее появление, являющееся частью предыдущего появления фрагмента х[m,n]. If m 1 <m, then the fragment x [m 1, n 1] comprises a moiety x [m-1, n], where to fragment x [m-1, n] is also a previous appearance forming part of the previous occurrence fragment x [ m, n]. Но тогда n≤m-1+s 1 [m-1]. But then n≤m-1 + s 1 [m-1]. По предположению имеет место n=m+s 1 [m], откуда m+s 1 [m]≤m-1+s 1 [m-1], т.е. Under the assumption of the case n = m + s 1 [m], where m + s 1 [m] ≤m-1 + s 1 [m-1], i.e., s 1 [m]≤s 1 [m-1]-1, что противоречит второму предположению. s 1 [m] ≤s 1 [m-1] -1, which contradicts the second hypothesis. Таким образом, предположение, что m 1 <m, приводит к противоречию, откуда m l =m. Thus, the assumption that m 1 <m, leads to a contradiction, where m = l m. Поскольку для фрагмента х[m 1 ,n 1 ] существует предыдущее появление, то по определению n 1 <m l +s 1 [m l ]=m+s 1 [m]=n, откуда n 1 =n. Since the fragment x [m 1, n 1] exists previous appearance, then by definition 1 n <m l + s 1 [m l] = m + s 1 [m] = n, where n 1 = n. Таким образом, фрагмент х[m,n) является максимальным фрагментом, для которого также существует предыдущее появление, и утверждение полностью доказано. Thus, fragment X [m, n) is the maximum fragment which is also a previous appearance, and the statement is proved.

B1. B1. Пусть m 1 <m 2 <…<m k - последовательность индексов, соответствующих началам максимальных фрагментов, для которых существует предыдущее появление, упорядоченная по возрастанию. Let m 1 <m 2 <... <m k - sequence of indices corresponding to the principles of maximum fragments, for which there is a previous appearance, ordered ascending. Тогда последовательность индексов, соответствующих концам этих максимальных фрагментов, также является упорядоченной по возрастанию, т.е. Then the sequence index corresponding to the ends of these maximum fragments is also ordered in ascending order, i.e., m 1 +s 1 [m 1 ]<m 2 +s 1 [m 2 ]<…<m k +s 1 [m k ]. m 1 + s 1 [m 1] <m + s 1 2 [m 2] <... <m k + s 1 [m k]. To, что конец i-го максимального фрагмента имеет индекс m i +s 1 [m i ], вытекает из свойства В. Предположим, что m i <m j , но n i =m i +s 1 [m i ]>=n j =m j +s 1 [m j ]. To, that the end of i-th fragment has the maximum m i + s 1 [m i] index derived from the properties of B. Assume that m i <m j, but n i = m i + s 1 [m i]> = n j = m j + s 1 [m j]. Тогда фрагмент x[m j ,n j ] строго содержится внутри фрагмента х[m i ,n i ], что противоречит максимальности фрагмента x[m j ,n j ]. Then the fragment x [m j, n j] is strictly contained within the fragment x [m i, n i], which is contrary to the maximal fragment x [m j, n j] .

Для функции s 2 [i] имеют место свойства, соответствующие свойствам функции s 1 [i], которые доказываются аналогично: For the function s 2 [i] hold properties corresponding to the properties of the function 1 s [i], which proved similarly:

А2. A2. s 2 [i-1]≥s 2 [i]-1. s 2 [i-1] ≥s 2 [i] -1.

Б2. B2. Для n<N-1 фрагмент х[m,n] является максимальным фрагментом, для которого существует предыдущее появление, тогда и только тогда, когда m=ns 2 [n] и s 2 [n]>s 2 [n+1]-1. For n <N-1 fragment x [m, n] is the maximum fragment for which there exists a previous appearance, if and only if m = ns 2 [n] and s 2 [n]> s 2 [n + 1] -one.

В2. AT 2. Пусть n 1 <n 2 <…<n k - последовательность индексов, соответствующих концам максимальных фрагментов, для которых существует предыдущее появление, упорядоченная по возрастанию. Let n 1 <n 2 <... <n k - sequence of indices corresponding to the ends of the fragments of the maximum for which there is a previous appearance, ordered ascending. Тогда последовательность индексов, соответствующих началам этих максимальных фрагментов, также является упорядоченной по возрастанию, т.е. Then the sequence indexes corresponding to the beginnings of these maximum fragments is also ordered in ascending order, i.e., n 1 -s 2 [n 1 ]<n 2 -s 2 [n 2 ]<…<n k -s 2 [m k ]. n 1 2 -s [n 1] <n 2 -s 2 [n 2] <... <n k -s 2 [m k].

2. Осуществление способа хранения значений функций s 1 [i] и s 2 [i] 2. Implementation of the method for storing function values s 1 [i] and s 2 [i]

Для хранения функции si[i] создают два битовых массива beg[i] и end[i], 0<=i<N. For storage function si [i] create two bit array beg [i] and end [i], 0 <= i <N. Сначала заполняют все элементы обоих массивов нулями. First fill the entire arrays of both elements by zeros. Последовательно вычисляют значения функции s 1 [i], начиная с i=0. Successively calculated function values s 1 [i], starting with i = 0. В том случае, если ненулевое значение s 1 [i] для текущего значения i оказывается не меньше значения s 1 [i-1], т.е. In that case, if non-zero value s 1 [i] for the current value i is not less than the value 1 s [i-1], i.e., если s 1 [i]>s 1 [i-1]-1, в элементы массивов beg[i] и end[i+s[i]] (только при i+s[i]<N) заносят значение 1. В результате выполнения этих действий для всех i=0, …, N-1 получают два битовых массива, которые кодируют функцию s 1 [i]. 1, if s [i]> s 1 [i-1] -1 in the array elements beg [i] and end [i + s [i] ] ( only when i + s [i] <N ) are entered value 1. As a result of these actions for all i = 0, ..., N-1 gave two bit array which encode function 1 s [i]. Заметим, что согласно свойству Б1 совокупность значений индекса i, для которых beg[i]=1, - это в точности совокупность начал максимальных фрагментов, для которых существует предыдущее появление, а совокупность значений индекса j, для которых end[j]=1, - это в точности совокупность концов таких фрагментов. Note that according to the property B1 plurality of index values ​​i, for which beg [i] = 1 - is precisely the collection began maximal fragments for which there exists a previous appearance, and the set of index j values, for which the end [j] = 1, - it is precisely the set of all such fragments.

Совокупность значений функций s 1 [i] и s 2 [i] может быть восстановлена по значениям битовых массивов beg[i] и end[i], 0≤i<N следующим образом. The totality of the values of s 1 [i] and s 2 [i] can be restored from the values of the bit arrays beg [i] and end [i], 0≤i <N follows. Ясно, что s 1 [0]=s 2 [0]=0. Clearly, s 1 [0] = s 2 [0] = 0. Находят самое первое значение i 0 , для которого beg[i 0 ]=1 и самое первое значение j 0 , для которого end[j 0 ]=1. Finding the first value i 0 for which beg [i 0] = 1 and j is the first value 0, for which end [j 0] = 1. В этом случае согласно предыдущему абзацу s 1 [i 0 ]=s 2 [j 0 ]=j 0 -i 0. Все предыдущие значения s 1 [i] и все предыдущие значения s 2 [j] равны нулю. In this case, according to the previous paragraph 1 s [i 0] = s 2 [j 0] = j 0 -i 0. All previous values s 1 [i] and all previous values s 2 [j] equal to zero. Далее находят следующее значение i 1 , для которого beg[ii]=1 и самое первое значение j 1 , для которого end[j 1 ]=1. Next, find the next value i 1 for which beg [ii] = 1 and j is the first value 1, for which the end [j 1] = 1. В этом случае i 1 - начало второго максимального фрагмента, для которого существует предыдущее появление, aj 1 - конец некоторого максимального фрагмента, для которого существует предыдущее появление. In this case, i 1 - beginning of second maximum fragment for which there is a previous occurrence, aj 1 - the end of a certain maximum fragment for which there exists a previous appearance. В силу свойств B1, B2 этот фрагмент также является вторым. By the properties of B1, B2, this fragment is also the second. Поэтому s 1 [i 1 ]=s 2 [j 1 ]=j 1 -i 1 . Therefore, s 1 [i 1] = s 2 [j 1] = j 1 -i 1. Для всех i, таких что i 0 <i<i 1 , последовательно имеет место s 1 [i 0 +1]=s 1 [i 0 ]-1, …, s 1 [i+1]=s 1 [i]-1, … Аналогично, для всех j, таких что j 0 <j<j 1 , последовательно имеет место s 2 [j 0 +1]=s 2 [j 0 ]-1, …, s 2 [j+1]=s 2 [j]-1, … Далее находят следующую пару индексов i 2 , j 2 и т.д. For all i, such that i 0 <i <i 1, sequentially holds 1 s [i 0 +1] = s 1 [i 0] -1, ..., 1 s [i + 1] = s 1 [i] -1, ... Similarly, for all j, j such that 0 <j <j 1 sequentially holds 2 s [j 0 +1] = s 2 [j 0] -1, ..., s 2 [j + 1] 2 = s [j] -1, ... Next, find the next pair of indices i 2, j 2, etc.

3. Вычисление массива всех значений функции s 2 [i] для 0≤i<N 3. Calculation of the array of function values s 2 [i] for 0≤i <N

Вычисление массива всех значений функции s 2 [i] для 0≤i<N может быть выполнено за время O(N) с использованием дополнительной памяти объемом O(N). Calculation of the array of function values s 2 [i] for 0≤i <N can be fulfilled in a time O (N), with the additional memory capacity O (N). Для доказательства этого утверждения используется построение суффиксного дерева. To prove this statement is used to build suffix tree. Суффиксное дерево для строки символов x[0,N-1] может быть построено за время O(N) и занимает память величиной O(N) [Ukkonen E. On-line construction of suffix trees // Algorithmica, Vol.14, No 3, 1995, pp.249-260]. Suffix tree for the symbols x [0, N-1] of the string can be constructed in time O (N) and holds the memory value of O (N) [Ukkonen E. On-line construction of suffix trees // Algorithmica, Vol.14, No 3, 1995, pp.249-260]. Ниже приводится алгоритм Укконена в интерпретации [Moritz Maab. Below Ukkonen algorithm to interpret [Moritz Maab. Suffix Trees and Their Applications. Suffix Trees and Their Applications. Technische Universitat Munchen. Technische Universitat Munchen. October 26, 1999 // http://www.informatics.ru/?page=lib_viewarticle&article_id=27 ]. October 26, 1999 // http://www.informatics.ru/?page=lib_viewarticle&article_id=27]. Предлагаемое нами дополнение в алгоритм Укконена позволяет вычислить весь массив значений функции s 2 [i] для 0≤i<N за время O(N). Our proposed in addition Ukkonen algorithm allows to compute the entire array function s 2 [i] values for 0≤i <N in a time O (N). Ниже мы приводим только те сведения относительно алгоритма Укконена, которые необходимы для понимания производимого нами дополнения; Below we provide only the information regarding the algorithm of Ukkonen, which are necessary for understanding the supplements produced by us; полное описание см. в указанной работе Мааба. full description see. Maaba in this work.

Для заданного слова x 1 … x N в алфавите ∑ алгоритм Укконена последовательно строит суффиксные деревья для подслов x 1 … x i , i=1, …, N. На шаге i+1 алгоритм преобразует суффиксное дерево T i для слова x 1 … x i в суффиксное дерево T i+1 слова x 1 … x i+1 . For a given word x 1 ... x N in the alphabet Σ Ukkonen algorithm successively builds suffix trees for subwords x 1 ... x i, i = 1, ..., N. At step i + 1 the algorithm converts the suffix tree for T i words x 1 ... x i in the suffix tree T i + 1 of x 1 ... x i + 1. Важнейшим понятием для алгоритма Укконена является понятие активного суффикса слова х 1 … x i . Important concepts for Ukkonen's algorithm is the concept active suffix of the word x 1 ... x i. Активным суффиксом слова называется самый длинный суффикс данного слова, для которого существует предыдущее появление. Active suffix of a word is called the longest suffix of the word for which there is a previous appearance. Тем самым значение s 2 [i] совпадает с длиной активного суффикса слова x 1 … x i . Thus, the value s 2 [i] coincides with the length of the active word suffix x 1 ... x i. Таким образом, все, что надо сделать - это дополнить алгоритм Укконена операторами, позволяющими выдавать длину активного суффикса на каждом шаге. Thus, all you have to do - is to be supplemented Ukkonen algorithm operators enable you to provide the length of the active suffix at each step.

Напомним, что суффиксное дерево T i является поддеревом в атомарном суффиксном дереве ast i для слова х 1 … x i . Recall that the suffix tree T i is a subtree in an atomic suffix tree ast i for the word x 1 ... x i. В атомарном суффиксном дереве ast i каждому суффиксу w слова соответствует узел w дерева, называемое положением w, такой, что The atomic suffix tree ast i w suffix to each word corresponds to a node w tree, called the situation w, such that

Figure 00000001
Здесь Here
Figure 00000002
- слово, получающееся конкатенацией всех символов алфавита ∑, являющихся метками ребер, составляющих путь из корня дерева в узел - the word obtained by concatenating all characters of the alphabet Σ, which are the marks of edges constituting the path from the root to the node
Figure 00000003
Если узел If the node
Figure 00000004
входит в суффиксное дерево T i , то положение называется явным, в противном случае - неявным. part of the suffix tree T i, the position is called explicitly, otherwise - implicit.

Если w=uv и If w = uv and

Figure 00000005
является узлом в суффиксном дереве T i , то пара is a node in the suffix tree T i, then the pair
Figure 00000006
называется ссылочной парой строки w относительно T i . It called a reference line pair w relative to T i. Если u - самый длинный префикс в w, такой, что является If u - the longest prefix in w, such that a
Figure 00000007
ссылочной парой, то a pair of reference, the
Figure 00000007
называется канонической ссылочной парой. It called the canonical reference pair. В алгоритме Укконена ссылочная пара задается парой (s,k), где s - узел суффиксного дерева, k - число символов в слове v. The algorithm Ukkonen reference pair specified by the pair (s, k), where s - suffix tree node, k - number of characters in a word v. Этой информации вполне достаточно, чтобы полностью задать положение узла атомарного суффиксного дерева ast i , соответствующего суффиксу w. This information is sufficient to fully define the position of the node of the atomic suffix tree ast i, the appropriate suffix w.

Алгоритм Укконена имеет вид: Ukkonen algorithm has the form:

1: one: Т←пустое дерево T ← empty tree
2: 2: добавить root и ⊥ в T Add root and ⊥ in T
3: 3: for всех х ∈ ∑ do for all x ∈ Σ do
4: four: добавить ребро ⊥ add an edge ⊥
Figure 00000008
root root
5: five: end for end for
6: 6: suffix_link(root)←⊥ suffix_link (root) ← ⊥
7: 7: n←length(t) n ← length (t)
8: eight: s←root s ← root
9: 9: k←1 k ← 1
10: ten: for i ← 1 to n do for i ← 1 to n do
11: eleven: (s, k) ← canonize (s, (k, i-1)) (S, k) ← canonize (s, (k, i-1))
12: 12: (s, k) ← update (s, (k, i)) (S, k) ← update (s, (k, i))
13: 13: end for end for

Для нас существенным является то, что в основном цикле построения суффиксного дерева (операторы 10-13) для каждого i в операторе 12 производится вычисление канонической ссылочной пары (s,k) активного суффикса слова t 1 … t i . For us it is essential that in the main loop construct suffix tree (operators 10-13) for each i in the operator 12 computes the canonical reference pair (s, k) active suffix word t 1 ... t i. Знание (s,k) позволяет вычислить длину активного суффикса. Knowledge (s, k) allows to calculate the length of the active suffix. Действительно, в узле s суффиксного дерева хранится позиция j начала суффикса слова x 1 … x i , соответствующего узлу s суффиксного дерева. Indeed, in the node s suffix tree stored position j beginning of the suffix of x 1 ... x i, the corresponding node s suffix tree. Значение длины активного суффикса вычисляют как s 2 [i]=ij-k+1. The length value is computed as the active suffix s 2 [i] = ij-k + 1. Добавление этого действия позволяет вычислить весь массив значений s 2 [i] за время O(N). Adding this action allows the entire array to calculate the values s 2 [i] in a time O (N).

4. Осуществление способа нахождения достаточно длинных повторяющихся фрагментов 4. Implementation of the process of finding sufficiently long repetitive fragments

Нахождение максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, состоит в том, что сначала вычисляют последовательность s 1 [i] по всем N значениям индексов i (0≤i<N), где s 1 [i] - максимальная длина линейного участка указанной последовательности данных, индекс начального элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], начало которого расположено ближе к началу последователь Finding the maximum portions in the final symbol sequence x [i] (0≤i <N ) finite alphabet that are repetitions of previously encountered portions, is first calculated that 1 sequence s [i] for all values of N indices i (0≤i <N), where s 1 [i] - the maximum length of linear portion of said sequence of data, the index entry item coincides with a given index i, coinciding with some other portion of the same data sequence x [i], the beginning of which is located closer to the top of the follower ости данных x[i], чем начало указанного линейного участка. awns data x [i], than the beginning of said linear portion. Возможность вычисления последовательности s 1 [i] (0≤i<N) за время, линейно зависящее от N, вытекает из изложенного выше в п.п.1-3. Ability to calculating the sequence s 1 [i] (0≤i <N) in a time linearly dependent on N, it follows from the above in p.p.1-3. Далее определяют все указанные максимальные участки как все отрезки x[m,n] последовательности x[i], для которых начальный индекс m удовлетворяет условию s 1 [m]>s 1 [m-1]-1, а конечный индекс n равен m+s 1 [m]-1. Next define all portions indicated maximum all the segments x [m, n] sequence x [i], for which the starting index m satisfies 1 s [m]> s 1 [m-1] -1, and the final index n is equal to m 1 + s [m] -1. To, что при этом получаются именно все максимальные участки в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющиеся повторениями ранее встречавшихся участков, следует из Свойства Б1 (см. п.1). To, that is thus obtained in all portions of the maximum of a finite sequence of symbols x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, it follows from the properties of the B1 (see. Claim 1).

Claims (3)

1. Способ нахождения всех максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, с целью сжатия файлов, при котором: 1. A method for finding the maximum of all areas in the final symbol sequence x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, to compress the file, wherein:
создают в памяти компьютера два битовых массива beg[i] и end[i] (0≤i<N); create a two bit beg computer memory array [i] and end [i] (0≤i <N);
заполняют все элементы указанных битовых массивов нулями; fill all the elements of said arrays of bit zeros;
вычисляют последовательность s 1 [i] по всем N значениям индексов i (0≤i<N), где s 1 [i] - максимальная длина линейного участка указанной последовательности данных, индекс начального элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], начало которого расположено ближе к началу последовательности данных x[i], чем начало указанного линейного участка, calculating a sequence of 1 s [i] for all values of N indices i (0≤i <N), where s 1 [i] - the maximum length of linear portion of said sequence of data, the index entry item coincides with a given index i, coinciding with some other in the same portion of the data sequence x [i], the beginning of which is arranged closer to the beginning of the data sequence x [i], than the beginning of said linear portion,
определяют все указанные максимальные участки как все отрезки x[m,n] последовательности x[i], для которых начальный индекс m удовлетворяет условию s 1 [m]>s 1 [m-1]-1, а конечный индекс n равен m+s 1 [m]-1, для чего для каждого значения i проверяют выполнение условия s 1 [i]>s 1 [i-1]-1 и в случае выполнения этого условия устанавливают в битовых массивах beg[i] и end[i] значения beg[i]=1 и end[i+s 1 [i]]=1; determine all portions of said maximum all the segments x [m, n] sequence x [i], for which the starting index m satisfies 1 s [m]> s 1 [m-1] -1, and the final index n is equal to m + s 1 [m] -1, for which for each value of i is checked to satisfy the condition 1 s [i]> 1 s [i-1] -1 in the case of this condition is set in the bit arrays beg [i] and end [i ] values beg [i] = 1 and end [i + s 1 [i]] = 1;
совокупность всех указанных максимальных участков восстанавливают по двум битовым массивам beg[i] и end[i], где единичное значение i-го элемента означает, что i-я позиция в указанной последовательности является соответственно началом и концом некоторого максимального указанного участка. the aggregate of all of said portions of maximum reduced by two bit arrays beg [i] and end [i], where a single value i-th element means that the i-position in said sequence is the beginning and end respectively of a portion of said maximum.
2. Способ нахождения всех максимальных участков в конечной последовательности символов x[i] (0≤i<N) конечного алфавита, являющихся повторениями ранее встречавшихся участков, с целью сжатия файлов, при котором: 2. A method for determining all maximal portions in the final symbol sequence x [i] (0≤i <N) finite alphabet that are repetitions of previously encountered portions, to compress the file, wherein:
создают в памяти компьютера два битовых массива beg[i] и end[i] (0≤i<N); create a two bit beg computer memory array [i] and end [i] (0≤i <N);
заполняют все элементы указанных битовых массивов нулями; fill all the elements of said arrays of bit zeros;
вычисляют последовательность s 2 [i] по всем N значениям индексов i (0≤i<N), где s 2 [i] - максимальная длина линейного участка указанной последовательности данных, индекс конечного элемента которого совпадает с данным индексом i, совпадающего с некоторым другим участком той же последовательности данных x[i], конец которого расположен ближе к началу последовательности данных x[i], чем конец указанного линейного участка, calculating a sequence of s 2 [i] for all values of N indices i (0≤i <N), where s 2 [i] - the maximum length of linear portion of said data sequence index of the final element of which coincides with the index i, coinciding with some other in the same portion of the data sequence x [i], the end of which is located closer to the top of the data sequence x [i], than the end of said linear portion,
определяют все указанные максимальные участки как все отрезки x[m,n] последовательности x[i], для которых конечный индекс n удовлетворяет условию s 2 [n]>s 2 [n+1]-1, а начальный индекс n равен ns 2 [n]+1, для чего для каждого значения i проверяют выполнение условия s 2 [i]>s 2 [i+1]-1 и в случае выполнения этого условия устанавливают в битовых массивах beg[i] и end[i] значения end[i]=l и beg[is 2 [i]+1]=1; determine all portions of said maximum all the segments x [m, n] x sequence [i], for which the final index n meets the condition s 2 [n]> s 2 [n + 1] -1 and the initial index n is equal to 2 ns [n] +1, then for each value i is checked to satisfy the condition s 2 [i]> s 2 [i + 1] -1 and, if this condition is set in the bit arrays beg [i] and end [i] values end [i] = l and beg [is 2 [i] +1] = 1;
совокупность всех указанных максимальных участков восстанавливают по двум битовым массивам beg[i] и end[i], где единичное значение i-го элемента означает, что i-я позиция в указанной последовательности является соответственно началом и концом некоторого максимального указанного участка. the aggregate of all of said portions of maximum reduced by two bit arrays beg [i] and end [i], where a single value i-th element means that the i-position in said sequence is the beginning and end respectively of a portion of said maximum.
3. Способ по п.2, в котором для вычисления массива всех значений функции s 2 [i] для всех N значений индексов i (0<i<N) используют компьютерную реализацию алгоритма Укконена, причем дополнительно для каждой i-й фазы алгоритма Укконена после определения канонической ссылочной пары (s,k) активного суффикса вычисляют s 2 [i] как длину активного суффикса, равную s 2 [i]=ij-k+1, где j - позиция начала активного суффикса, хранящаяся в узле s суффиксного дерева, которое построено для префикса строки x[i], включающего в себя первые i символов указанной последовательности 3. The method of claim 2, wherein for computing an array of all values of s 2 [i] for all values of the indices N i (0 <i <N) is used Ukkonen computer implementation of the algorithm, and further for each i-th phase Ukkonen algorithm after determining the canonical reference pair (s, k) active suffix computed s 2 [i] as the length of the active suffix equal to s 2 [i] = ij-k + 1, where j - starting position of the active suffix stored in node s suffix tree , which is constructed for the string prefix x [i], including the first i characters of said sequence . .
RU2010120949/08A 2010-05-26 2010-05-26 Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array RU2473960C2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2010120949/08A RU2473960C2 (en) 2010-05-26 2010-05-26 Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2010120949/08A RU2473960C2 (en) 2010-05-26 2010-05-26 Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array

Publications (2)

Publication Number Publication Date
RU2010120949A RU2010120949A (en) 2011-12-10
RU2473960C2 true RU2473960C2 (en) 2013-01-27

Family

ID=45404930

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2010120949/08A RU2473960C2 (en) 2010-05-26 2010-05-26 Method of finding maximum repeating sections of sequence of characters of finite alphabet and method of calculating auxiliary array

Country Status (1)

Country Link
RU (1) RU2473960C2 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2622629C2 (en) * 2015-03-31 2017-06-16 Закрытое акционерное общество "Лаборатория Касперского" Method of searching for the road by tree
RU2628199C1 (en) * 2016-06-07 2017-08-15 Общество с ограниченной ответственностью "ЛАН-ПРОЕКТ" Data compression method

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0129439B1 (en) * 1983-06-20 1989-02-01 Sperry Corporation High speed data compression and decompression apparatus and method
US5883588A (en) * 1994-10-04 1999-03-16 Nec Corporation Data compression system and data compression device for improving data compression rate and coding speed
US6226628B1 (en) * 1998-06-24 2001-05-01 Microsoft Corporation Cross-file pattern-matching compression
RU2212709C1 (en) * 2002-10-03 2003-09-20 Общество с ограниченной ответственностью "Р.Т.С.-Сервис" Method for processing object-oriented interactive video data
RU2377670C2 (en) * 2004-03-15 2009-12-27 Майкрософт Корпорейшн Data compression

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0129439B1 (en) * 1983-06-20 1989-02-01 Sperry Corporation High speed data compression and decompression apparatus and method
US5883588A (en) * 1994-10-04 1999-03-16 Nec Corporation Data compression system and data compression device for improving data compression rate and coding speed
US6226628B1 (en) * 1998-06-24 2001-05-01 Microsoft Corporation Cross-file pattern-matching compression
RU2212709C1 (en) * 2002-10-03 2003-09-20 Общество с ограниченной ответственностью "Р.Т.С.-Сервис" Method for processing object-oriented interactive video data
RU2377670C2 (en) * 2004-03-15 2009-12-27 Майкрософт Корпорейшн Data compression

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2622629C2 (en) * 2015-03-31 2017-06-16 Закрытое акционерное общество "Лаборатория Касперского" Method of searching for the road by tree
RU2628199C1 (en) * 2016-06-07 2017-08-15 Общество с ограниченной ответственностью "ЛАН-ПРОЕКТ" Data compression method

Also Published As

Publication number Publication date
RU2010120949A (en) 2011-12-10

Similar Documents

Publication Publication Date Title
Crochemore et al. A subquadratic sequence alignment algorithm for unrestricted scoring matrices
US6526574B1 (en) System for finding differences between two computer files and updating the computer files
US6119120A (en) Computer implemented methods for constructing a compressed data structure from a data string and for using the data structure to find data patterns in the data string
JP4805267B2 (en) Multistage query processing system and method used with token spaces repository
JP3006766B2 (en) It encodes the data in the compressed state, and decoding apparatus and method for transmitting
EP0584992B1 (en) Text compression technique using frequency ordered array of word number mappers
JP2610084B2 (en) Data expanding method and apparatus as well as data compression and decompression method and apparatus
Navarro et al. Fully functional static and dynamic succinct trees
US7164370B1 (en) System and method for decoding data compressed in accordance with dictionary-based compression schemes
Hirschberg Algorithms for the longest common subsequence problem
US7161507B2 (en) Fast, practically optimal entropy coding
EP0677927A2 (en) Character string pattern matching for compression and the like using minimal cycles per character
US5936560A (en) Data compression method and apparatus performing high-speed comparison between data stored in a dictionary window and data to be compressed
US4988998A (en) Data compression system for successively applying at least two data compression methods to an input data stream
Sadakane New text indexing functionalities of the compressed suffix arrays
KR100414236B1 (en) A search system and method for retrieval of data
US20100082545A1 (en) Compression of sorted value indexes using common prefixes
US5841376A (en) Data compression and decompression scheme using a search tree in which each entry is stored with an infinite-length character string
Navarro et al. A general practical approach to pattern matching over Ziv-Lempel compressed text
Lanctot et al. Estimating DNA sequence entropy
EP0691628A2 (en) Data compression method and system
Kreft et al. On compressing and indexing repetitive sequences
US5049881A (en) Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique
JP3278297B2 (en) Data compression method and data recovery method and a data compression apparatus and a data recovery device
US8838551B2 (en) Multi-level database compression

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20180527