WO2015151444A1 - データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体 - Google Patents

データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体 Download PDF

Info

Publication number
WO2015151444A1
WO2015151444A1 PCT/JP2015/001568 JP2015001568W WO2015151444A1 WO 2015151444 A1 WO2015151444 A1 WO 2015151444A1 JP 2015001568 W JP2015001568 W JP 2015001568W WO 2015151444 A1 WO2015151444 A1 WO 2015151444A1
Authority
WO
WIPO (PCT)
Prior art keywords
data
value
continuous section
bit string
specified
Prior art date
Application number
PCT/JP2015/001568
Other languages
English (en)
French (fr)
Inventor
穣 岡嶋
丸山 晃一
Original Assignee
Necソリューションイノベータ株式会社
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 Necソリューションイノベータ株式会社 filed Critical Necソリューションイノベータ株式会社
Priority to EP15772790.0A priority Critical patent/EP3128443A4/en
Priority to JP2016511364A priority patent/JP6276386B2/ja
Priority to US15/127,479 priority patent/US10789227B2/en
Publication of WO2015151444A1 publication Critical patent/WO2015151444A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/70Type of the data to be coded, other than image and sound
    • H03M7/707Structured documents, e.g. XML

Definitions

  • the present invention relates to a data structure, an information processing apparatus, an information processing method, and a program recording medium for realizing these, and in particular, a data structure, an information processing apparatus, and a data structure for performing efficient calculation on a bit string,
  • the present invention relates to an information processing method and a program recording medium.
  • a complete dictionary is a data structure that supports two types of operations called rank and select for a bit string B of length n. These two types of operations are defined as follows. However, in the following, the first element of the bit string B is B [0], the last element of the bit string B is B [n-1], and the substring consisting of the j-th element from the i-th element on the bit string B is It is represented by B [i, j], and the substring when the j-th element that is the terminal is not included is represented by B [i, j).
  • rank1 (B, i) is an operation that returns the number of 1s in the range of B [0, i).
  • Rank0 (B, i) is an operation that returns the number of 0 existing in the range of B [0, i).
  • select1 (B, i) is an operation for returning the position where the (i + 1) th 1 appears on the bit string B.
  • select0 (B, i) is an operation for returning the position where the (i + 1) th 0 appears on the bit string B.
  • a complete dictionary may support an operation that returns the value B [i] of the i-th element called access (B, i).
  • complete dictionaries are sometimes called “concise bit vectors”, “rank / select dictionary”, etc., depending on the literature, but all mean the same thing.
  • a complete dictionary is the basis for creating a space-saving data structure called a succinct data structure.
  • the concise data structure expresses various data structures such as a tree structure, a graph structure, and text data with a small data structure, and is attracting attention as a technique for handling large-scale data.
  • the size of the concise data structure depends on the size of the underlying complete dictionary. Therefore, realizing a complete dictionary with as small a size as possible is important in handling large-scale data. This point will be described below.
  • the bit string may be compressed.
  • a technique for realizing a complete dictionary of a bit string while compressing the bit string is known.
  • Such a method has an advantage that a complete dictionary can be realized with a size smaller than that of the original bit string B.
  • the complete dictionary compression method differs depending on the distribution of 1 and 0 in the original bit string.
  • bit string such as “sparse bit string”.
  • bit string such as “0000010000001000000”.
  • Non-Patent Document 1 see “42.4 Sparse Case”.
  • bit string E in which this array D is represented by a single code. This bit string is represented by a length of 2 m. At this time, a complete dictionary for the bit string E can be constructed. A complete dictionary of bit string E can be realized with 2m + o (m) bits.
  • a complete dictionary of sparse bit strings is a combination of an uncompressed complete dictionary of array E and bit array L. Therefore, since array L is m log (n / m) bits and complete dictionary of array E is represented by 2m + o (m) bits, the total size is m log (n / m) + 2m + o (m) bits. This size is smaller than the original n-bit array B in a sparse case where m ⁇ n.
  • select1 (B, i) can be calculated by the following equation (1).
  • rank1 (B, i) can be calculated as follows. First, by counting the number of “0” using the complete dictionary of the bit string E, the position t of the minimum upper bit H [t] that is equal to or larger than the upper bits of i is obtained. The value of P [t] is obtained by adding the lower bits L [t] corresponding to H [t]. Thereafter, if t is incremented by 1 and the maximum P [t] not exceeding i is obtained, then the value of t represents the number of “1” existing up to position i.
  • Non-Patent Document 3 As a method for expressing a complete dictionary of sparse bit strings, a method disclosed in Non-Patent Document 3 can be cited. A complete dictionary of sparse bit strings can be efficiently expressed by using any of the methods disclosed in Non-Patent Document 1 and Non-Patent Document 3.
  • bit string such as “0000111100001111”.
  • a sparse bit string is a bit string in which 0 is long and continuous, but in this bit string, 1 is long and is different in this respect.
  • a region where 1s are continuous is referred to as “run”. For example, in the above bit string example, two runs are included.
  • a complete dictionary of bit strings in which 1s and 0s are continuous can be efficiently expressed using run-length compression.
  • Non-Patent Document 2 discloses a method for realizing a complete dictionary by run-length compressing a bit string in which 1s and 0s are continuous (“3.1 Run-Length Encoded Wavelet Tree”). reference).
  • Non-Patent Document 2 a region where 1s are continuous is expressed as “1 bit run”, and a region where 0s are continuous is expressed as “0 bit run”.
  • a region in which 1s are continuous is denoted as “run”.
  • a region in which 0 continues is expressed as “blank”. Therefore, it can be considered that all bit strings such as “0000111100001111” are alternately arranged with runs and blanks. Below, the method currently disclosed by the nonpatent literature 2 is demonstrated.
  • bit string B in which 1 and 0 are continuous is given.
  • this bit string B is expressed by two sparse bit strings B1 and a bit string Brl.
  • b be the number of runs included in bit string B.
  • the bit string B1 is a sparse bit string that becomes 1 only at the start position of all runs.
  • the bit B1 is as shown in Equation 2 below. In the formulas of this specification is expressed as B 1 and B1.
  • bit string B1 since the number of runs included in the bit string B is b, the bit string B1 includes b 1s.
  • bit string Brl is a sparse bit string obtained by connecting the results of all the run lengths represented by a hexadecimal code.
  • the bit string Brl also includes b 1s.
  • both the bit string B1 and the bit string Brl are sparse bit strings, a complete dictionary can be efficiently constructed using the complete dictionary of sparse bit strings described in Non-Patent Document 1.
  • Non-Patent Document 2 the complete dictionary of sparse bit strings disclosed in Non-Patent Document 3 is used instead of the complete dictionary of sparse bit strings disclosed in Non-Patent Document 1.
  • both complete dictionaries are common in realizing rank and select, and there is no difference in operation regardless of which complete dictionary is used.
  • description will be given using a complete dictionary of sparse bit strings described in Non-Patent Document 1.
  • bit string Brl can be regarded as a stored value of rank1 (B, i) at the start position i of the r-th run. That is, in the bit string Brl, the r-th 1 position counted from the head represents the value of rank 1 (B, i) at the start position i of the r-th run. Therefore, the following formula 3 is established. In the formulas herein, it represents a Brl and B rl.
  • bit string B can be expressed by the bit string B1 and the bit string Brl. Therefore, the three types of operations on the bit string B, rank1, rank0, and select1, use the complete dictionary of the bit string B1 and the bit string Brl. It can be calculated by using it.
  • j select1 (B1, r-1).
  • the calculated rank1 (B, i) is obtained by adding the number of 1s in the range [0, j-1] and the number 1 in the range [j, i).
  • select1 (B, i) can be calculated by the following equation (7).
  • r rank1 (Brl, i + 1).
  • r represents that the run when the total run length is i + 1 when the run length is added from the top is the rth.
  • select1 (B1, r) represents the start position of this run
  • i + 1- select1 (Brl, r) is the bit string B in which number 1 in this run. Indicates whether it is the i + 1th 1 in the whole. If this value is summed and 1 is subtracted, it becomes the (i + 1) th 1 position.
  • bit string B is “001110011011”
  • bit string B1 is “0010000100101”
  • bit string Brl is “10010101”.
  • i 4, that is, select1 (B, 4) is to be obtained.
  • a complete dictionary can be expressed by a sparse bit string.
  • the size of the complete dictionary of the bit string B is considered.
  • the size of the complete dictionary of the bit string B is the sum of the sizes of the bit string B1 and the bit string Brl.
  • the size of the complete dictionary of sparse bit strings is m log (n / m) + 2m + o (m) bits, where n is the length of the bit string and m is the number of included 1s.
  • the size of the bit string B1 includes length 1 and b 1s, so b log (n / b) + 2b + o (b) bits.
  • the bit string Brl is b ⁇ log (m / b) + 2b + o (b) bits because the bit string Brl has a length m and includes b 1s. Accordingly, the size of the complete dictionary of the bit string B is obtained by adding the two. That is, the size of the complete dictionary of the bit string B is b (log (n / b) + log (m / b) +4) + o (b) bits.
  • Non-Patent Document 2 only by preparing two sparse bit strings, run-length compression is performed on a bit string in which 1 and 0 are continuous, and rank1, rank0, and select1 can be calculated efficiently.
  • Non-Patent Document 2 has a problem that select0 cannot be calculated efficiently. This is because the bit string that holds the value of rank1 that is necessary for efficient calculation of select1 is used in this method, but the bit string that holds the value of rank0 that is necessary for efficient calculation of select0. This is because is not used.
  • one complete dictionary of b (log (m / b) + 2b + o (b) bits is added, and the total size is b (log (n / b) + log ( Increase from m / b) +4) + o (b) bits to b (log (n / b) + 2log (m / b) +6) + o (b) bits, that is, m is close to n
  • log (n / b) and log (m / b) are logarithmic, they are almost the same size, and if this is set to C, 2b (C + 2) + o (b) bits to 3b (C + 2 ) + o (b), which increases to approximately 1.5 times the size, which is a non-negligible increase in size when implementing a complete dictionary.
  • select1 and select0 are both used in various data structures.
  • a tree-structured data structure called a wavelet tree both the complete dictionary select1 and select0 are called when the tree structure is traced up. Therefore, there is a need for a complete dictionary that can calculate both select1 and select0 in various data structures and that is small in size.
  • An example of the object of the present invention is to solve the above-mentioned problem and to enable the two types of select operations using the complete dictionary for the target bit string, while suppressing an increase in the size of the complete dictionary, information structure, information A processing device, an information processing method, and a program recording medium are provided.
  • an information processing apparatus provides: A storage unit storing a data structure for expressing a bit string composed of a first value and a second value;
  • the data structure is First data for specifying the position of all or a part of a continuous section in which one or more of the first value or the second value are continuous on the bit string;
  • second data specifies the number of appearances of the first value that appears from the beginning of the bit string to the continuous section;
  • the third data that specifies the number of appearance of the second value that appeared from the beginning of the bit string to the continuous section; have, It is characterized by that.
  • a data structure for reproducing a bit string composed of a first value and a second value On the bit string, first data that specifies the position of all or part of a continuous section in which one or more of the same values are continuous; For a part of the continuous section, on the bit string, second data that specifies the number of appearances of the first value that appears from the beginning of the bit string to the continuous section; and For a part of the continuous section, on the bit string, the third data that specifies the number of appearance of the second value that appeared from the beginning of the bit string to the continuous section; It is characterized by having.
  • an information processing method includes: Identifying a position of all or a part of a continuous section in which one or more of the first value or the second value continues on a bit string composed of a first value and a second value; The second data specifying the number of appearances of the first value appearing from the beginning of the bit string to the continuous section on the bit string, for a part of the continuous section, A part of the information processing method uses a data structure having third data that specifies the number of appearances of the second value that appears from the beginning of the bit string to the continuous section on the bit string.
  • a first select position which is a position on the bit string and the number of the first values included from the head to the position is equal to the natural number, is Identifying using one data, the second data, and the third data
  • a second select position which is a position on the bit string and the number of the second values included from the head to the position is equal to the natural number, Identifying using one data, the second data, and the third data
  • a program recording medium provides: On the computer, (A) a storage device included in the computer; Identifying a position of all or a part of a continuous section in which one or more of the first value or the second value continues on a bit string composed of a first value and a second value; The second data specifying the number of appearances of the first value appearing from the beginning of the bit string to the continuous section on the bit string, for a part of the continuous section, Storing a data structure having a third data that specifies, for a part, the number of appearances of a second value appearing from the beginning of the bit string to the continuous section on the bit string; (B) when a natural number is input, a first select position which is a position on the bit string and the number of the first values included from the head to the position is equal to the natural number is Identifying using one data, the second data, and the third data; and (C) when a natural number is input, a second select position
  • an increase in the size of a complete dictionary can be suppressed while enabling two types of select operations using the complete dictionary for a target bit string.
  • FIG. 1 is a block diagram showing a schematic configuration of an information processing apparatus according to an embodiment of the present invention.
  • FIG. 2 is a block diagram specifically showing the configuration of the information processing apparatus 100 according to the embodiment of the present invention.
  • FIG. 3 is a diagram illustrating an example of a target bit string and various values obtained therefrom.
  • FIG. 4 is a diagram showing an example of a data structure for expressing the bit string shown in FIG.
  • FIG. 5 is a flowchart showing the operation of the information processing apparatus according to the embodiment of the present invention.
  • FIG. 6 is a block diagram illustrating an example of a computer that implements the information processing apparatus according to the embodiment of the present invention.
  • FIG. 7 is a diagram schematically illustrating a calculation method of select1 (B, i) in the embodiment of the present invention.
  • rank1 (B, sa) at the start position sa of the a-th run is expressed as rank1 of the run
  • rank0 (B, sa) is expressed as rank0 of the run.
  • theorem For any a-th run on the bit string B, the start position of the a-th run is set to sa, and the start position of the a + 1-th run is set to sa + 1. At this time, if only four values of sa, rank0 (B, sa), sa + 1, rank1 (B, sa + 1) are known, 1 or 0 for all bits in the range of B [sa, sa + 1). Can be identified.
  • the method disclosed in Non-Patent Document 2 corresponds to a case where two types of values of ⁇ start position, rank 1> are always stored for all runs. Therefore, in the method disclosed in Non-Patent Document 2, only the bit string of rank1 is retained, so that select1 can be calculated at high speed. However, in the method disclosed in Non-Patent Document 2, since the bit string of rank0 is not retained, there arises a problem that select0 cannot be calculated at high speed.
  • Non-Patent Document 2 may be simply extended to store all three types of values of ⁇ start position, rank1, rank0>.
  • the required data size is two types of ⁇ start position, rank1>. The value is increased by about 1.5 times compared to the stored value.
  • the information processing apparatus does not always store the same two types of values as in the method disclosed in Non-Patent Document 2, but uses two different types for each run. A value may be selected, and the two selected values may be stored.
  • the information processing apparatus since only two of the three values ⁇ start position, rank1, rank0> are stored, the information processing apparatus stores all three values of ⁇ start position, rank1, rank0>. Compared to the case, the required data size can be reduced to about two-thirds, and the storage area can be saved. As described above, the information processing apparatus can dynamically calculate the remaining one of the three values from the other two values.
  • the embodiment of the present invention is superior in that rank 1 is not stored for all start positions, but rank 1 and sometimes rank 0 are stored by run. It is.
  • the information processing apparatus is in a state of sampling the values of rank1 and rank0 at various places in the entire bit string.
  • select1 it is possible to get an approximate position by searching for the sampled rank1 value.
  • select0 you can get the approximate position by searching the sampled rank0 value.
  • the information processing apparatus dynamically calculates the rank 1 or rank 0 value of the surrounding run to obtain an accurate position.
  • the information processing device calculates select1 (B, i)
  • the run having rank1 value close to i is identified from the runs in which rank1 value is stored. To do.
  • the information processing apparatus dynamically calculates the value of rank1 up to the run for the run that does not store the value of rank1 that exists around the run, using this run as a clue.
  • the value of rank1 of such a run is dynamically calculated from the remaining two values, namely the start position of the run and the value of rank0. In this way, the information processing apparatus can calculate the position at which 1 actually appears by restoring the value of rank1 of the surrounding runs.
  • the information processing device calculates select0 (B, i), conversely, it identifies a run having a rank0 value close to i from the runs in which the rank0 value is stored, and its surroundings.
  • the rank 0 value may be calculated dynamically for the runs in which the rank 0 value is not stored.
  • the information processing apparatus may store three types of values for each run by rotation. That is, the first run stores two other than the start position, the second run stores two other than rank1, the third run stores two other than rank0, and the fourth run A method of returning again and storing two data other than the start position is conceivable.
  • the information processing apparatus does not hold the value of rank 0 at the start position of the even-numbered run and the value of rank 1 at the start position of the odd-numbered run, but can dynamically calculate it.
  • FIG. 1 is a block diagram showing a schematic configuration of an information processing apparatus according to an embodiment of the present invention.
  • the information processing apparatus 100 includes a storage unit 10 that stores a data structure 11.
  • the data structure 11 is a data structure for expressing a bit string composed of a first value and a second value, and includes a first data 12, a second data 13, a third data 14, and the like. have.
  • the first data is data that specifies the position of all or part of a continuous section in which one or more first values or second values are continuous on the bit string.
  • the second data is data that specifies the number of appearances of the first value that appears from the beginning of the bit string to the continuous section on the bit string for a part of the continuous section.
  • the third data is data that specifies the number of appearances of the second value that appears from the beginning of the bit string to the continuous section on the bit string for a part of the continuous section.
  • the first value is “1”
  • the second value is “0”
  • the continuous section where the first data specifies the position is “1”.
  • the first data is data for specifying the start position of the run (hereinafter referred to as “continuous section position data”).
  • the second data is data specifying the number of occurrences of “1” up to the corresponding continuous section, that is, the value of rank 1 (hereinafter referred to as “rank 1 data”).
  • the third data is data that specifies the number of occurrences of “0” up to the corresponding continuous section, that is, the value of rank 0 (hereinafter referred to as “rank 0 data”).
  • the storage unit 10 stores any one of the three values ⁇ start position, rank1, rank0> for all or part of the continuous section. Therefore, two types of select operations can be performed on the target bit string. Moreover, since it is not necessary to store all three values in all the continuous sections, an increase in the size of the complete dictionary (data structure 11) is suppressed.
  • FIG. 2 is a block diagram specifically showing the configuration of the information processing apparatus 100 according to the embodiment of the present invention.
  • the information processing apparatus 100 includes a calculation unit 20, an input reception unit 30, and an output unit 40 in addition to the storage unit 10 that stores the data structure 11. ing.
  • the information processing apparatus 100 is constructed, for example, by introducing a program to be described later into a computer. In this case, the information processing apparatus 100 can function as a part of an operating system constituting the computer.
  • the input receiving unit 30 receives an external input and outputs it to the calculating unit 20.
  • the output unit 40 outputs the calculation result by the calculation unit 20 to the outside.
  • the calculation unit 20 includes a first select calculation unit 21, a second select calculation unit 22, a first rank calculation unit 23, and a second rank calculation unit 24.
  • the first selection calculation unit 21 is a position on the bit string when a natural number is input, and the number of “1 (first value)” included from the beginning to the position is calculated. A first select position that is equal to a natural number is specified.
  • the first select calculation unit 21 specifies the first select position using the continuous section position data, rank1 data, and rank0 data. That is, the first select calculation unit 21 executes select1 (B, i) for the bit string B.
  • the second select calculation unit 22 is a position on the bit string, and the number of “0 (second value)” included from the head to the position is equal to the natural number.
  • the second select position is specified using the continuous section position data, rank1 data, and rank0 data. That is, the second select calculation unit 21 executes select0 (B, i) for the bit string B.
  • the first rank calculation unit 23 uses “1 (first) that has appeared up to the designated position using the continuous section position data, rank1 data, and rank0 data. The number of occurrences of " That is, the first rank calculation unit 23 executes rank1 (B, i) for the bit string B.
  • the second rank calculation unit 24 uses the continuous section position data, rank1 data, and rank0 data to display “0 (second) The number of occurrences of " That is, the second rank calculation unit 24 executes rank0 (B, i) for the bit string B.
  • FIG. 3 is a diagram illustrating an example of a target bit string and various values obtained therefrom.
  • FIG. 4 is a diagram showing an example of a data structure for expressing the bit string shown in FIG.
  • the bit string B that is data is [001110011011], and has three continuous sections (runs) for one.
  • the starting positions of each run are 2, 7, and 10.
  • start position the appearance order is described at the position of the corresponding start position.
  • “Pos1” represents a position.
  • the subscript of the array of the bit string B starts from 0, but since the rank of the run is counted from the first, it is assumed that the 0th run does not exist.
  • rank1 indicates the number of occurrences of “1” from the head at each position in the bit string B, that is, the value of rank1.
  • Rank0 indicates the number of occurrences of “0” from the beginning at each position in the bit string B, that is, the value of rank0.
  • Select1 indicates an input value i whose position is returned as a result of select1 (B, i).
  • Select0 indicates an input value i whose position is returned as a result of select0 (B, i).
  • the continuous section position data is data obtained by converting the data of “start position” in FIG. 3 into a bit string.
  • the rank1 data is data obtained by converting the data of “rank1” at the start position in FIG. 3 into a bit string.
  • the rank0 data is data obtained by converting the data of “rank0” at the start position in FIG. 3 into a bit string.
  • the bit string constituting the continuous section position data is denoted as “B1”, the bit string constituting the rank1 data as “Br1”, and the bit string constituting the rank0 data as “Br0”.
  • the data structure 11 includes, for each continuous section, at least two values among the three values of the start position, rank1, and rank0 are continuous section position data, rank1 data, rank0. Built to be identified by data. At this time, the specified at least two values change depending on the position (start position) of the continuous section.
  • the continuous section position data in the example of FIG. 4 specifies all positions of continuous sections in which at least one “1” continues on the bit string B.
  • the continuous section in which the number of occurrences of rank1 data “1” is identified matches the even section that appears evenly.
  • a continuous section in which the number of occurrences of rank 0 data “0” is specified is a continuous section that appears odd.
  • the data structure 11 is not limited to the example shown in FIG.
  • the data structure specifies rank1 and rank0 in the first continuous section, specifies the start position and rank0 in the second continuous section, and specifies the start position and rank1 in the third continuous section. It may be specified so that this is repeated thereafter.
  • the first select calculator 21 and the second select calculator 22 perform calculations as follows. That is, the first select calculation unit 21 first specifies the number of occurrences of “1” in rank1 data based on the number of occurrences of “1” specified by rank1 data, and is a specific target. Estimate continuous intervals where select1 exists or is close.
  • the first select calculation unit 21 is based on the continuous section position data and rank0 data for a continuous section that is close to the estimated continuous section and for which the number of occurrences of “1” is not specified in rank1 data. , Specify the number of occurrences of “1”. Then, the first select calculation unit 21 specifies select1 using the specified number of occurrences of “1”.
  • the second select calculation unit 22 first identifies the number of occurrences of “0” in the rank0 data based on the number of occurrences of “0” specified by the rank0 data for the continuous section. Estimate the continuous section where select0 that is the target of exists or is close.
  • the second select calculation unit 22 is based on the continuous section position data and the rank1 data for a continuous section that is close to the estimated continuous section and the number of occurrences of “0” is not specified in the rank0 data. , Specify the number of occurrences of “0”. Then, the second select calculation unit 22 specifies select0 using the specified number of occurrences of “0”.
  • the data structure 11 includes the position specified by the continuous section position data, the number of occurrences of “1” specified by rank1 data, and the number of occurrences of “0” specified by rank0 data. It should be compressed by considering it as an increasing number sequence. In this case, the data structure 11 is stored in the storage unit 10 in a compressed state.
  • FIG. 5 is a flowchart showing the operation of the information processing apparatus according to the embodiment of the present invention.
  • FIG. 1 is taken into consideration as appropriate.
  • the information processing method is performed by operating the information processing apparatus 100. Therefore, the description of the information processing method in the present embodiment is replaced with the following description of the operation of the information processing apparatus 100.
  • the input receiving unit 30 receives an input of a natural number from the outside and an input of a requested operation (step A1), and outputs the received content to the calculating unit 20.
  • the calculation unit 20 determines whether or not the requested operation is select1 (step A2). As a result of the determination in step A2, when the requested operation is select1, the first select calculation unit 21 acquires the continuous section position data 11, the rank1 data 12, and the rank0 data 13 from the storage unit 10. Then, the first select calculation unit 21 calculates select1 for the natural number accepted in step A1 using these (step A3).
  • step A4 determines whether or not the requested operation is select0 (step A4).
  • step A4 when the requested operation is select0, the second select calculation unit 22 acquires continuous section position data 11, rank1 data 12, and rank0 data 13 from the storage unit 10. Then, the second select calculation unit 22 calculates select0 for the natural number accepted in step A1 using these (step A6).
  • step A4 when the requested operation is not select0, the calculation unit 20 determines whether or not the requested operation is rank1 (step A5).
  • step A5 when the requested operation is rank1, the first rank calculation unit 23 obtains continuous section position data 11, rank1 data 12, and rank0 data 13 from the storage unit 10. And the 1st rank calculation part 23 calculates rank1 about the natural number accepted by step A1 using these (step A7).
  • step A5 determines whether the requested operation is not rank1
  • the second rank calculation unit 24 acquires the continuous section position data 11, rank1 data 12, and rank0 data 13 from the storage unit 10. .
  • the 2nd rank calculation part 24 calculates rank0 about the natural number received by step A1 using these (step A8).
  • step A3 When step A3, A6, A7, or A8 described above is executed, the output unit 40 receives the calculation result and outputs the calculation result to the outside (step A9). As described above, by executing steps A1 to A9, operations of select1, select0, rank1, and rank0 can be performed using the data structure 11.
  • bit string B1 is a sparse bit string that becomes 1 only at the start position of a run.
  • the length of this bit string is equal to the number m of “1” s contained in the bit string B. Further, this bit string includes b / 2 “1” s.
  • the length of this bit string is equal to the number (n ⁇ m) of “0” included in B.
  • the bit string includes b / 2 1s.
  • the size of the data structure 11, that is, the size of the complete dictionary is the sum of the sizes of the complete dictionaries of the three sparse bit strings B1, bit strings Br1, and bit strings Br0.
  • the size of the complete dictionary of the bit string B1 is b log (n / b) + 2b + o (b) bits because the length n includes b 1s.
  • the size of the complete dictionary of bit string Br1 is length m and includes b / 2 1s, so (b / 2) log (2m / b) + 2 (b / 2) + o (b) bits is there.
  • the size of the complete dictionary of the bit string Br0 is (b / 2) log (2 (nm) / b) + 2 (b / 2) + o (b ) Bit. Therefore, when these are added together, the total size S of the complete dictionary (data structure 11) is as shown in the following equation (10).
  • log (n / b), log (2m / b), and log (2 (n-m) / b) can be regarded as having substantially the same size.
  • m n / 2
  • these numbers are set to log (n / b).
  • the size of the complete dictionary in the present embodiment is 2b (C + 2) + o (b) bits. In other words, this indicates that both the operations of select1 and select0 can be supported while being almost the same size as the complete dictionary of Non-Patent Document 2 that supports only select1.
  • the size of the complete dictionary in this embodiment is about (2/3) the size of the complete dictionary of Non-Patent Document 2 that supports both select1 and select0. ing.
  • the first value is “1”, the second value is “0”, and the continuous interval in which the first data specifies the position is “1”.
  • the present invention is not limited to this example. Since 1 and 0 in the bit string can be exchanged, 1 and 0 are inverted, the first value is “0”, the second value is “1”, and the first data specifies the continuous section May be a continuous interval of “0”. Even in this case, the same effect as described above can be obtained.
  • the continuous section position data holds the start position of the continuous section.
  • the front and rear can be interchanged, and the continuous section position data may hold the end position instead of the start position of the continuous section. Even in this case, the same effect can be obtained.
  • rank 1 is held for even-numbered runs and rank 0 is held for odd-numbered runs.
  • the relationship between the odd-numbered and even-numbered may be switched. Even in this case, the same effect can be obtained.
  • the program in this embodiment may be a program that causes a computer to execute steps A1 to A9 shown in FIG.
  • the information processing apparatus 100 and the information processing method in the present embodiment can be realized by installing and executing this program on a computer.
  • a CPU Central Processing Unit
  • the storage unit 10 is realized by storing data files constituting these in a storage device such as a memory or a hard disk provided in the computer.
  • FIG. 6 is a block diagram illustrating an example of a computer that implements the information processing apparatus according to the embodiment of the present invention.
  • the computer 110 includes a CPU 111, a main memory 112, a storage device 113, an input interface 114, a display controller 115, a data reader / writer 116, and a communication interface 117. These units are connected to each other via a bus 121 so that data communication is possible.
  • the CPU 111 performs various operations by developing the program (code) in the present embodiment stored in the storage device 113 in the main memory 112 and executing them in a predetermined order.
  • the main memory 112 is typically a volatile storage device such as a DRAM (Dynamic Random Access Memory).
  • the program in the present embodiment is provided in a state of being stored in a computer-readable recording medium 120. Note that the program in the present embodiment may be distributed on the Internet connected via the communication interface 117.
  • the storage device 113 include a semiconductor storage device such as a flash memory in addition to a hard disk.
  • the input interface 114 mediates data transmission between the CPU 111 and an input device 118 such as a keyboard and a mouse.
  • the display controller 115 is connected to the display device 119 and controls display on the display device 119.
  • the data reader / writer 116 mediates data transmission between the CPU 111 and the recording medium 120, and reads a program from the recording medium 120 and writes a processing result in the computer 110 to the recording medium 120.
  • the communication interface 117 mediates data transmission between the CPU 111 and another computer.
  • the recording medium 120 include general-purpose semiconductor storage devices such as CF (Compact Flash) and SD (Secure Digital), magnetic storage media such as a flexible disk, or CD-ROM (Compact Disk).
  • Optical storage media such as “Read Only Memory”.
  • FIGS. 1 to 6 A specific example of the information processing apparatus according to the present embodiment shown in FIGS. 1 to 6 will be described below. At that time, the description will focus on the fact that the data structure (complete dictionary) in the present embodiment can be used as a complete dictionary, that is, the operations of access, rank, and select can be performed.
  • the data structure (complete dictionary) in the present embodiment can be used as a complete dictionary, that is, the operations of access, rank, and select can be performed.
  • bit string B shown in FIG. 3 is assumed.
  • the bit string B shown in FIG. 3 is composed of seven 1s and five 0s in a bit string of length 12.
  • the start positions of the run in the bit string B are four positions B [2], B [7], B [10], and B [12].
  • the run starting from B [12] is a virtual run that does not exist in the actual bit string B.
  • the start position of the a-th run is sa
  • the position where the a-th run ends and becomes 0 is ea
  • the start position of the a + 1-th run is sa + 1.
  • sa ⁇ i ⁇ sa + 1 and sa ⁇ ea ⁇ sa + 1 always hold.
  • the ranges of B [sa, ea) are all 1, and the ranges of B [ea, sa + 1) are all 0.
  • a s a a sa, a sa + 1 and s a + 1, and B r0 to Br0 expressed as a Br1 B r1.
  • rank0 (B, ea) rank0 (B, sa) holds.
  • rank1 (B, ea) rank1 (B, sa + 1) holds.
  • the value of rank0 in sa is recorded as the “(a-1) / 2 + 1” th 1-position in Br0.
  • the value of rank1 in sa + 1 is recorded as the “(a-1) / 2 + 1” -th 1 position in Br1. Therefore, if the sum of the results of calculating select1 in each complete dictionary is calculated, the value of ea is calculated.
  • the value of access (B, i) is calculated by comparing with the value of i as described above.
  • the calculation unit 20 may divide the case in the same way. If i ⁇ ea, the desired answer can be calculated by the following equation (12).
  • the calculation unit 20 calculates the value of access (B, i) by comparing the value of ea with the value of i as described above.
  • the calculation unit 20 can calculate access and rank1. In effect, the calculation unit 20 calculates rank1 once on the bit string B1, calculates select1 once on the bit string Br1, and calculates select1 once on the bit string Br0. Since rank0 (B, i) is equal to “i-rank1 (B, i)”, it can be easily calculated from the value of rank1.
  • FIG. 7 is a diagram schematically illustrating a calculation method of select1 (B, i) in the embodiment of the present invention.
  • the calculation unit 20 can calculate the answer of select1 using the data structure 11.
  • a 0 may be obtained.
  • the same calculation can be performed.
  • i since the (a * 2) th run does not exist, i always exists on the (a * 2 + 1) th run.
  • b is always 0, so i ⁇ b is not satisfied.
  • the calculation unit 20 seems to call the same data structure 11 many times at first glance, but only refers to an element adjacent to the element once found, so the calculation unit 20 The search in the data structure 11 is completed only once. That is, rank1 in the bit string Br1, select1 in the bit string B1, and select1 in the bit string Br0 are three times in total.
  • the a-th run is the (a * 2-1) th in the total run including the odd-numbered and even-numbered runs. Therefore, pay attention to the three runs (a * 2-1), (a * 2), and (a * 2 + 1).
  • the rank0 value at the start position of the (a * 2) th run is an even number, so it is not stored directly in the complete dictionary and must be calculated from the position and the rank1 value. This value can be calculated by using Equation 21 below.
  • the information processing apparatus 100 shown in the embodiments and examples can perform all operations of access, rank1, rank0, select1, and select0 using a data structure (complete dictionary).
  • the target value is obtained by executing rank or select in the complete dictionary constructed by three sparse bit strings several times. That is, the calculation amount in this embodiment is the same as the rank or select of a complete dictionary constructed with sparse bit strings, so the processing is sufficiently fast in practical terms.
  • Non-Patent Document 2 there is a bit string that holds the value of rank1, but there is no bit string that holds the value of rank0, and it is possible to calculate select0 at high speed. It was impossible.
  • rank1 and rank0 are alternately recorded in the data structure 11 so that the size of the data structure 11 is substantially the same as that of the complete dictionary described in Non-Patent Document 2. Select0 and select1 can be calculated at high speed.
  • the value of rank1 is stored in the data structure, but it can also be regarded as a unicode encoding of the run length.
  • a bit string in which the run length is simply encoded is used, whereas in the above-described embodiments and examples, two spaces are inserted.
  • Two bit strings are used: a bit string obtained by unicode-encoding the value obtained by summing the run lengths, and a bit string obtained by unicode-encoding a value obtained by summing the lengths of two blanks across the run. This is a device that is greatly different from the conventional run length compression in which the continuous lengths of the same symbols are encoded as they are.
  • an increase in the size of a complete dictionary can be suppressed while enabling two types of select operations using a complete dictionary for a target bit string.
  • the present invention is useful for a system that requires a search, particularly a system that uses a wavelet tree structure.
  • the present invention has been described above using the above-described embodiment as an exemplary example. However, the present invention is not limited to the above-described embodiment. That is, the present invention can apply various modes that can be understood by those skilled in the art within the scope of the present invention. This application claims the priority on the basis of Japanese application Japanese Patent Application No. 2014-073545 for which it applied on March 31, 2014, and takes in those the indications of all here.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

[課題]対象となるビット列について、完備辞書を用いた2種類のselect操作を可能にしつつ、完備辞書のサイズの増大を抑制する。 [解決手段]情報処理装置100は、第1の値と第2の値とで構成されたビット列を表現するためのデータ構造11を記憶した記憶部10を備えている。データ構造11は、ビット列上で、第1の値又は第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、連続区間の一部について、ビット列上で、ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、連続区間の一部について、ビット列上で、ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータとを有している。

Description

データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体
 本発明は、データ構造、情報処理装置、情報処理方法、及びこれらを実現するためのプログラム記録媒体に関し、特には、ビット列上での効率的な計算を行うための、データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体に関する。
 近年、完備辞書(fully indexable dictionary)というデータ構造が注目されている(例えば、非特許文献1参照)。完備辞書は、長さnのビット列Bに対してrank、selectと呼ばれる2種類の操作をサポートするデータ構造である。この2種類の操作は以下のように定義される。但し、以下において、ビット列Bの最初の要素をB[0]、ビット列Bの最後の要素をB[n-1]とし、ビット列B上のi番目の要素からj番目の要素からなる部分列をB[i,j]で表し、終端であるj番目の要素を含まない場合の部分列をB[i,j)で表すものとする。
 まず、「rank1(B,i)」は、B[0,i)の範囲に存在する1の数を返す操作である。「rank0(B,i)」は、B[0,i)の範囲に存在する0の数を返す操作である。select1(B,i)は、ビット列B上でi+1番目の1が出現する位置を返す操作である。select0(B,i)は、ビット列B上でi+1番目の0が出現する位置を返す操作である。
 なお、この他に、完備辞書では、access(B,i)というi番目の要素の値B[i]を返す操作がサポートされることもある。また、完備辞書は、文献によって、「簡潔ビットベクトル」、「rank / select dictionary」等と呼ばれることがあるが、いずれも同じものを意味している。
 ところで、完備辞書は、簡潔データ構造(succinct data structure)と呼ばれる省スペースなデータ構造を作るための基礎となっている。簡潔データ構造は、木構造、グラフ構造、テキストデータなど、様々なデータ構造を小さなデータ構造で表現するものであり、大規模データを扱うための技術として注目されている。更に、簡潔データ構造のサイズは、基礎となる完備辞書のサイズに依存する。そのため、完備辞書を、極力小さなサイズで実現することが、大規模データを扱う上で重要となる。以下に、この点について説明する。
 まず、元となるビット列Bを圧縮せずにそのまま保持しつつ、ビット列に補助構造を付加することで完備辞書を実現する方法が知られている。これは下記の非特許文献1の「4.2.3 密な場合」で紹介されている手法である。なお、本明細書では、このような圧縮がされていない完備辞書を「無圧縮な完備辞書」と表記し、予め与えられているものとする。
 一方、元のビット列において、1と0との出現の分布に特徴がある場合、ビット列を圧縮できる可能性がある。このような場合に、ビット列を圧縮しつつ、そのビット列の完備辞書を実現する手法が知られている。このような手法は、元のビット列Bよりも小さいサイズで完備辞書を実現できる利点がある。但し、完備辞書の圧縮方法は、元のビット列における1と0との分布によって異なっている。
 まず、初めに、要素のほとんどが0で構成され、1が稀にしか存在していないビット列の完備辞書の圧縮方法について説明する。ここでは、このようなビット列を「疎なビット列」と呼ぶ。たとえば、「0000010000001000000」のようなビット列が挙げられる。
 このとき、1の出現位置に注目することで、このビット列を圧縮しつつ、完備辞書を実現する方法が知られている。ここでは非特許文献1(「4.2.4 疎な場合」を参照)に開示されている手法を紹介する。
 この手法は「Elias-Fano representation」又は「sdarray」と呼ばれている。ビット列Bには、m個の1が含まれているものとする。ビット列が疎な場合とは、m<<nが成り立つ場合である。このとき、1の出現する位置を収めた、長さmの単調増加配列Pを考える。P[i] = select1(B,i)と定義される。なお、nはビット列の長さを表している。
 このとき、床関数をfloor()で表すと、p= floor(log(n/m))と定義される。但し、本明細書では、logの底を2とする。そして、以下のような長さmの配列Lと配列Hとを考える。
配列L[i]は、単調増加配列P[i]の下位pビットを保持し、配列H[i]は、単調増加配列P[i]の残りの上位ビットを保持するとする。すなわち、P[i] =2p・H[i] + L[i]が成立するとする。なお、このとき、配列Hは、広義単調増加列である。
 ここで、D[i]=H[i]-H[i-1]+1となる配列Dを考える。配列Dは正整数列である。また、この配列Dを単進符号で表したビット列Eを考える。このビット列は長さ2mで表される。このとき、ビット列Eについての完備辞書を構築することができる。ビット列Eの完備辞書は2m+o(m)ビットで実現できる。
 疎なビット列の完備辞書は、配列Eの無圧縮な完備辞書と、ビット配列Lとを組み合わせたものである。よって、配列Lはm log(n/m)ビットであり、配列Eの完備辞書は2m+o(m)ビットで表されるため、合計のサイズはm log(n/m)+2m+o(m)ビットである。このサイズは、m<<nが成り立つ疎な場合において、元のnビットの配列Bよりも小さくなる。
 この非特許文献1に開示され方法で実現された完備辞書において、select1(B,i)は下記の数1によって計算することができる。
Figure JPOXMLDOC01-appb-M000001
 また、rank1(B,i)は、以下のように計算できる。初めに、ビット列Eの完備辞書を用いて「0」の数をカウントすることで、iの上位ビットと同じかそれより大きくなるような最小の上位ビットH[t]の位置tを求める。このH[t]と対応する下位ビットL[t]を足し合わせることでP[t]の値を求める。この後、tを1づつ増やしていき、iを超えない最大のP[t]を求めれば、そのときtの値が、位置iまでに存在する「1」の数を表す。
 このとき、ひとたびP[t]の値を求めた後は、P[t-1]の値又はP[t+1]の値を求めるときに、配列E及び配列Lを初めから探索しなおさなくても計算できることに注意する。何故なら、配列L及び配列Eにおいて、P[t]に関する値が保持されている記憶領域は既に見つかっているので、その前後の値を調べればP[t-1]又はP[t+1]の値は容易に計算できるからである。また、このように、疎なビット列の完備辞書は、単調増加配列Pを効率的に表現したものと見なすこともできる。
 その他に、疎なビット列の完備辞書を表現する方法としては、非特許文献3に開示されている手法も挙げられる。非特許文献1及び非特許文献3のいずれに開示されている手法を用いても、疎なビット列の完備辞書を効率的に表現できる。
 続いて、1と0との両方が連続しているビット列の完備辞書の圧縮手法について説明する。このようなビット列の例としては、「0000111100001111」のようなビット列が挙げられる。疎なビット列は0が長く連続するビット列であるが、このビット列においては、1も長く連続しており、この点で異なっている。また、本明細書では、1が連続している領域のことを「ラン(run)」と表記することとする。例えば、上記のビット列の例では、2つのランが含まれている。また、1と0とが連続するビット列の完備辞書は、ランレングス圧縮を用いて効率的に表現することができる。
 具体的には、非特許文献2は、このような1と0とが連続するビット列をランレングス圧縮することによって完備辞書を実現する手法を開示している(「3.1  Run-Length Encoded Wavelet Tree」参照)。
 なお、非特許文献2では、1が連続する領域は「1ビット・ラン(1-bit run)」と表記され、0が連続する領域は「0ビット・ラン(0-bit run)」と表記されているが、本明細書では、上述のように、特に指定のない限り、1が連続する領域を「ラン」と表記する。また、本明細書では、0が連続する領域のことは「空白」と表記する。従って、「0000111100001111」のようなビット列は、全て、ランと空白とが交互に並んでいるものと考えることができる。以下に、非特許文献2に開示されている手法について説明する。
 まず、1と0とが連続するビット列Bが与えられているとする。このとき、このビット列Bを、2つの疎なビット列B1とビット列Brlとによって表現することを考える。ビット列Bに含まれるランの数をbとする。また、ビット列B1は、全てのランの開始位置においてのみ、1になるような、疎なビット列であるとする。式で表すと、ビットB1は、下記の数2の通りとなる。なお、本明細書の数式では、B1をBと表現する。
Figure JPOXMLDOC01-appb-M000002
 また、ビット列Bに含まれるランの数がbであるので、ビット列B1には、b個の1が含まれる。更に、ビット列Brlは、全てのランの長さを単進符号で表した結果をつなげた疎なビット列である。ビット列Brlにも、b個の1が含まれる。更に、ビット列B1とビット列Brlとは、どちらも疎なビット列なので、非特許文献1に記載されている疎なビット列の完備辞書を用いて、効率的に完備辞書を構築することができる。
 なお、非特許文献2では、非特許文献1に開示されている疎なビット列の完備辞書ではなく、非特許文献3に開示されている疎なビット列の完備辞書が用いられることになっている。但し、どちらの完備辞書も、rankとselectとを実現する点で共通であり、どちらの完備辞書が用いられても、動作に違いはない。以下においては、非特許文献1に記載されている疎なビット列の完備辞書を用いて説明する。
 また、ビット列Brlは、r番目のランの開始位置iにおけるrank1(B,i)の値を保存したものと見なすこともできる。即ち、ビット列Brlの中で、先頭から数えてr番目の1の位置は、r番目のランの開始位置iにおけるrank1(B,i)の値を表している。よって、下記の数3が成立する。なお、本明細書の数式では、BrlをBrlと表現する。
Figure JPOXMLDOC01-appb-M000003
 以上のように、ビット列Bは、ビット列B1とビット列Brlとによって表現することができるので、ビット列B上でのrank1、rank0、及びselect1の3種類の操作は、ビット列B1とビット列Brlの完備辞書を用いることで計算できる。
 具体的には、ビット列Bがビット列B1とビット列Brlとによって表現されている場合、rank1(B,i)は、以下のように計算できる。まず、r=rank1(B1,i)を計算する。rはビット列B上でiよりも前の位置で開始するランの数を表す。もしr=0であれば、[0,i)の範囲に1が存在しないことが確定するので、rank1(B,i)=0であり計算は終了する。
 一方、r>=1であれば、r番目のランの開始位置jについて考える。jは、j=select1(B1, r-1)で計算できる。求めるrank1(B,i)は、[0,j-1]の範囲における1の数と、[j,i)の範囲における1の数を足したものとなる。
 [0, j-1]の範囲における1の数は、以下のように計算できる。まず、r=1であれば、このランが最初のランであるので、[0,j-1]の範囲に存在する1の数は0である。r>1であれば、[0, j-1]の範囲における1の数は、r-1個のランの長さの合計であり、select1(Brl, r-1)で計算できる。次に、r番目のランの長さをkとする。このとき、kは、下記の数4によってで計算できる。また、[j,i)の範囲における1の数は、以下の数5によって計算できる。更に、rank0(B,i)は、下記の数6によって簡単に計算できる。
Figure JPOXMLDOC01-appb-M000004
Figure JPOXMLDOC01-appb-M000005
Figure JPOXMLDOC01-appb-M000006
 また、ビット列Bがビット列B1とビット列Brlとによって表現されている場合、select1(B,i)は、以下の数7によって計算できる。但し、r = rank1(Brl,i+1)である。つまり、rは、先頭からランの長さを加算した場合に、ランの長さの合計がi+1となったときのランがr番目であることを表す。
Figure JPOXMLDOC01-appb-M000007
 すなわち、求めるi+1番目の1はこのランの上にあることが分かる。また、上記数7において、select1(B1,r)は、このランの開始位置を表しており、i+1- select1(Brl,r)は、このランの中で何番目の1が、ビット列B全体の中でi+1番目の1であるかを表している。この値を合計して1を引けば、i+1番目の1の位置となる。
 ここで、ビット列Bが「001110011011」である場合の各操作の計算について具体的に説明する。このとき、ビット列B1は「0010000100101」、ビット列Brlは「10010101」となる。この場合において、i=8、つまり、rank1(B,8)を求めたいとする。
 位置iよりも前の位置から始まるランの数は、r=rank1(B1,8)=2である。2番目のランの開始位置はj=select1(B1,2-1)=7である。このとき、[0,j-1]の範囲における1の数は1個のランの長さの合計であり、select1(Brl,1)=3で計算できる。次に、2番目のランの長さをkとすると、上記数4において、r=2となるので、k=select1(Brl,2)-select1(Brl,2-1)=5-3=2となる。また、i-j= 8-7= 1<kであるので、[i,j)の範囲には1がi - j= 1個存在することが分かる。従って、求める答えは、rank1(B,8)=3+1=4となる。
 また、もうひとつの例として、i=10、つまり、rank1(B,10)を求める場合についても説明する。この場合も、k=2となるが、上記の例とは異なり、i-j=10-7=3>kが成立する。従って、求める答えは、rank1(B,10)=3+2=5となる。
 また、上記の例において、i=4、つまりselect1(B,4)を求めたいとする。この場合、位置iよりも前の位置から始まるランの数は、r=rank1(Brl,4+1)=2である。従って、求める位置は2番目のランの上にあることが分かる。このランの開始位置は、select1(B1,2-1)=7である。更に、求めるi+1番目の1は、4+1-select1(Brl,2-1)=4+1-3=2より、このランの中で2番目の1である。7+2-1=8より、求めるi+1番目の1はB[8]にあったことが分かる。
 以上のように、疎なビット列によって完備辞書を表現することができる。ここで、ビット列Bの完備辞書のサイズを考える。ビット列Bの完備辞書のサイズは、ビット列B1とビット列Brlとのサイズの和である。また、疎なビット列の完備辞書のサイズは、ビット列の長さをn、含まれる1の数をmとして、m log(n/m)+2m+o(m)ビットとなる。
 従って、この式をB1とBrlに当てはめると、ビット列に含まれるランの数をbとした場合、ビット列B1のサイズは、長さnでb個の1を含むので、b log(n/b)+2b +o(b)ビットとなる。同様に、ビット列Brlは、長さmでb個の1を含むので、b log(m/b)+2b+o(b)ビットとなる。従って、この2つを合計することで、ビット列Bの完備辞書のサイズが求められる。つまり、ビット列Bの完備辞書のサイズは、b (log(n/b)+log(m/b) +4)+o(b)ビットとなる。
岡野原 大輔,「高速文字列解析の世界, データ圧縮・全文検索・テキストマイニング(シリーズ 確率と情報の科学)」, 岩波書店,2012年12月27日 V. Makinen, G. Navarro, J. Siren, and N. Valimaki. Storage and retrieval of highly repetitive sequence collections. J. Comp. Biol., 17(3):281-308, 2010. A. Gupta, W.-K. Hon, R. Shah, and J.S. Vitter. Compressed data structures: Dictionaries and data-aware measures. In Proc. 16th Data Compression Conference(DCC), pages 213-222, 2006.
 上述したように、上記非特許文献2に開示された手法を用いれば、2つの疎なビット列を用意するだけで、1と0とが連続するビット列をランレングス圧縮すると共に、rank1、rank0、及びselect1を効率的に計算することができる。
 しかしながら、非特許文献2に開示された手法には、select0を効率的に計算することができないという問題がある。これは、この手法では、select1の効率的な計算に必要となる、rank1の値を保持したビット列は用いられているが、select0の効率的な計算に必要となる、rank0の値を保持したビット列は用いられていないからである。
 一方、上述した、select1の効率的な計算に必要となるビット列(ビット列Brl)に加えて、select0の効率的な計算に必要となるビット列も保持するようにすれば、select0を効率的に計算することができるようになると考えられる。
 しかし、この場合は、b(log(m/b)+2b +o(b)ビットの完備辞書がひとつ追加されることになり、全体のサイズは、b (log(n/b)+log(m/b)+4)+o(b)ビットから、b (log(n/b)+2log(m/b)+6)+o(b)ビットに増加する。つまり、mがnに近いときlog(n/b)とlog(m/b)は対数なのでほぼ同じ大きさであり、これを仮にCと置くと、2b(C+2)+o(b)ビットから3b(C+2)+o(b)ビットに増える計算になり、ほぼ1.5倍のサイズに増加する。これは完備辞書を実装する際において、無視できないサイズの増大となる。
 また、様々なデータ構造で、select1及びselect0は、どちらも使用される。例えば、ウェーブレット木と呼ばれる木構造型のデータ構造では、木構造を上にたどる際に完備辞書のselect1及びselect0の両方が呼び出される。従って、様々なデータ構造において、select1及びselect0の両方の計算ができ、且つ、サイズの小さい完備辞書が求められている。
 本発明の目的の一例は、上記問題を解消し、対象となるビット列について、完備辞書を用いた2種類のselect操作を可能にしつつ、完備辞書のサイズの増大を抑制し得る、データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体を提供することにある。
 上記目的を達成するため、本発明の一側面における情報処理装置は、
 第1の値と第2の値とで構成されたビット列を表現するためのデータ構造を記憶した記憶部を備え、
 前記データ構造は、
前記ビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、
前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、
前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、
を有している、
ことを特徴とする。
 また、上記目的を達成するため、本発明の一側面におけるデータ構造は、
 第1の値と第2の値とで構成されたビット列を再現するためのデータ構造であって、
 前記ビット列上で、同じ値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、
 前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、
 前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、
を有している、ことを特徴とする。
 また、上記目的を達成するため、本発明の一側面における情報処理方法は、
 第1の値と第2の値とで構成されたビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、を有するデータ構造を用いた情報処理方法であって、
(a)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第1の値の個数が前記自然数と等しくなる第1のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
(b)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第2の値の個数が前記自然数と等しくなる第2のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
を有する、ことを特徴とする。
 更に、上記目的を達成するため、本発明の一側面におけるプログラム記録媒体は、
コンピュータに、
(a)当該コンピュータが備える記憶装置に、
第1の値と第2の値とで構成されたビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、を有するデータ構造を格納する、ステップと、
(b)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第1の値の個数が前記自然数と等しくなる第1のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
(c)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第2の値の個数が前記自然数と等しくなる第2のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、を実行させることを特徴とする。
 以上のように、本発明によれば、対象となるビット列について、完備辞書を用いた2種類のselect操作を可能にしつつ、完備辞書のサイズの増大を抑制することができる。
図1は、本発明の実施の形態における情報処理装置の概略構成を示すブロック図である。 図2は、本発明の実施の形態における情報処理装置100の構成を具体的に示すブロック図である。 図3は、対象となるビット列とそれから求められる各種値との一例を示す図である。 図4は、図3に示すビット列を表現するためのデータ構造の一例を示す図である。 図5は、本発明の実施の形態における情報処理装置の動作を示すフロー図である。 図6は、本発明の実施の形態における情報処理装置を実現するコンピュータの一例を示すブロック図である。 図7は、本発明の実施例におけるselect1(B,i)の計算方法を概略的に説明する図である。
(発明の実施の形態の情報処理装置におけるデータ処理)
 最初に、本発明の概要について説明する。本明細書では、a番目のランの開始位置sa におけるrank1(B, sa)の値を、ランのrank1と表記し、rank0(B, sa)の値をランのrank0と表記する。
 まず、全てのランについて、そのランの<開始位置、rank1、rank0>の3つの値が記憶されているとき、その3つの値さえあれば元のビット列Bを復元できるので、元のビット列Bを復元するのに十分な情報が得られることを示す。従って、以下の定理が成立する。
定理:
 ビット列B上の、任意のa番目のランについて、a番目のランの開始位置をsa、a+1番目のランの開始位置をsa+1とおく。このとき、sa、rank0(B, sa)、sa+1、rank1(B, sa+1)の4つの値さえ分かれば、B[sa , sa+1)の範囲の全てのビットについて1か0かを特定できる。
(証明)
 a番目のランが終了して0になる位置をeaとおく。このとき、ランの定義から、B[sa, ea)の範囲は全て1であり、B[ea , sa+1)の範囲は全て0である。このとき、eaの値は以下の数8によって計算できる。なお、本明細書の数式では、eaをeaと表現する。
Figure JPOXMLDOC01-appb-M000008
 また、上記の証明では、次の事実が用いられている。即ち、[sa , ea)の範囲には1しか存在しないため、rank0(B,ea)=rank0(B,sa)が成り立つ。同様に、[ea, sa+1)の範囲には0しか存在しないため、rank1(B,ea)=rank1(B,sa+1)が成り立つ。eaが具体的に計算できたので、B[sa, sa+1)のビットが全て判明する。(証明終わり)
 上述の定理によれば、連続する2つのランについて<開始位置、rank1、rank0>の値が分かれば、その2つのランの開始位置に挟まれた領域も完全に復元できることが分かる。
これを全てのランの間に適用すれば、全てのランについて、<開始位置、rank1、rank0>の3つの値が記憶されているとき、その3つの値さえあれば元のビット列Bを復元できる。
 ここで、本発明の実施の形態では、さらに、<開始位置、rank1、rank0>の3つの値のうち、2つの値さえわかっていれば、残り1つの値を動的に計算することができることに注目する。任意の開始位置iについて、以下の数9に示す関係が常に成り立つためである。
Figure JPOXMLDOC01-appb-M000009
 これにより、全てのランについて、<開始位置、rank1、rank0>の3つの値のうち、2つの値さえわかっていれば、元のビット列Bを復元できることが分かる。
 このような視点に立って考えると、非特許文献2に開示された方法は、全てのランについて<開始位置、rank1>の2種類の値を常に記憶している場合に相当する。従って、非特許文献2に開示された方法では、rank1のビット列だけが保持されているので、select1を高速に計算することはできる。しかし、非特許文献2に開示された方法では、rank0のビット列は保持されていないため、select0を高速に計算できないという問題が発生する。
 なお、非特許文献2に記載の方法を、単純に、<開始位置、rank1、rank0>の3種類の値の全てを記憶するように拡張することも考えられる。しかし、この場合は、上述の問題の解決は可能となるが、「発明が解決しようする課題」の欄でも述べたように、必要なデータのサイズが、<開始位置、rank1>の2種類の値を記憶している倍に比べて、約1.5倍に増大してしまう。
 このため、本発明の実施の形態における情報処理装置は、非特許文献2に開示された方法のように、常に同じ2種類の値を記憶するのではなく、それぞれのランについて、異なる2種類の値を選択し、選択した2種類の値を記憶してもよい。
 すなわち、本発明では、全てのランのそれぞれに関して、<開始位置、rank1、rank0>の3つの値のうち2つの値だけを選び、その値を記憶してもよい。さらに、各位置について、記憶する2つの値を変更してもよい。たとえば、あるランについては、<開始位置、rank1>の2つの値だけを記憶し、他のあるランについては<開始位置、rank0>の2つの値を記憶してもよい。これにより、あるランではrank0の値が記憶されておらず、また、あるランではrank1の値が記憶されていない状態になる。これはすなわち、全てのランについてrank1やrank0を記憶するのではなく、一部のランについてサンプリングして記憶していることを表す。
 この場合、<開始位置、rank1、rank0>の3つの値のうち2つの値だけしか記憶されていないので、情報処理装置は、<開始位置、rank1、rank0>の3つの値の全てを記憶する場合に比べて、必要なデータのサイズを約3分の2の大きさにでき、記憶領域を節約できる。上述したように、情報処理装置は、3つの値のうち残り1つの値を、他の2つの値から動的に計算できる。
 ランの開始位置を配列すると、全てのランについて単調増加する配列であり、同様にrank1とrank0も単調増加する配列となる。よって、疎なビット列の完備辞書によって効率的に開始位置やrank1やrank0を検索できる。
 非特許文献2に記載の方法に比べて、本発明の実施の形態が優れているのは、全ての開始位置についてrank1を記憶するのではなく、ランによって、時にはrank1、時にはrank0を記憶することである。これにより、情報処理装置は、ビット列全体の様々な場所におけるrank1とrank0の値をサンプリングしている状態になる。情報処理装置が、select1を計算するときには、このサンプリングされたrank1の値を検索することで、だいたいの位置のあたりをつけることができる。select0を計算するときは、サンプリングされたrank0の値を検索することで、だいたいの位置のあたりをつけることができる。だいたいの位置のあたりをつけた後、情報処理装置は、その周囲のランのrank1あるいはrank0の値を動的に計算して、正確な位置を求める。
 具体的には、情報処理装置が、select1(B,i)を計算するときは、まず初めに、rank1の値が記憶されているランの中から、iに近いrank1の値を持つランを特定する。次に、情報処理装置は、このランを手がかりとして、このランの周囲に存在する、rank1の値が記憶されていないランについて、そのランまでのrank1の値を動的に計算する。そのようなランのrank1の値は、残り2つの値、すなわちランの開始位置とrank0の値から動的に計算される。こうして、情報処理装置は、周囲のランのrank1の値を復元することで、実際にi番目に1が出現する位置を計算することができる。
 また、情報処理装置が、select0(B,i)を計算するときは、逆に、rank0の値が記憶されているランの中から、iに近いrank0の値を持つランを特定し、その周囲に存在する、rank0の値が記憶されていないランについて、rank0の値を動的に計算すればよい。
 なお、3種類のうちどの2種類を選択して記憶するかは、特には限定されないが、選択の仕方には様々な方法が存在する。たとえば、情報処理装置は、ランごとに3種類の値をローテーションで記憶してもよい。すなわち、1番目のランでは開始位置以外の2つを記憶し、2番目のランではrank1以外の2つを記憶し、3番目のランではrank0以外の2つを記憶し、4番目のランでは、再び戻って、開始位置以外の2つを記憶する、といった方法が考えられる。
 また、偶数番目のランについて<開始位置、rank1>の2つの値を記憶し、奇数番目のランについて<開始位置、rank0>の2つの値を保持する方法も挙げられる。この場合、情報処理装置は、偶数番目のランの開始位置におけるrank0の値と、奇数番目のランの開始位置におけるrank1の値は保持されないが、動的に計算できる。
(実施の形態)
 以下、本発明の実施の形態における、データ構造、情報処理装置、情報処理方法、及びプログラムについて、図1~図6を参照しながら説明する。
[装置構成]
 最初に、本実施の形態における情報処理装置の構成について説明する。図1は、本発明の実施の形態における情報処理装置の概略構成を示すブロック図である。
 図1に示すように、本実施の形態における情報処理装置100は、データ構造11を記憶した記憶部10を備えている。データ構造11は、第1の値と第2の値とで構成されたビット列を表現するためのデータ構造であり、第1のデータ12と、第2のデータ13と、第3のデータ14とを有している。
 また、これのデータのうち、第1のデータは、ビット列上で、第1の値又は第2の値が1個以上連続する連続区間の全部又は一部の位置を特定するデータである。また、第2のデータは、連続区間の一部について、ビット列上で、ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定するデータである。第3のデータは、連続区間の一部について、ビット列上で、ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定するデータである。
 ここで、本実施の形態では、第1の値が「1」、第2の値が「0」、第1のデータが位置を特定する連続区間が「1」の連続区間であるとする。この場合、第1のデータは、ランの開始位置を特定するデータ(以下「連続区間位置データ」と表記する。)である。また、第2のデータは、対応する連続区間までの「1」の出現数、すなわちrank1の値を特定するデータ(以下「rank1データ」と表記する。)である。更に、第3のデータは、対応する連続区間までの「0」の出現数、すなわちrank0の値を特定するデータ(以下「rank0データ」と表記する。)である。
 つまり、本実施の形態では、記憶部10において、連続区間の全部又は一部について、<開始位置、rank1、rank0>の3つの値のうちいずれかが、格納されている。したがって、対象となるビット列について2種類のselect操作が可能となる。また、全ての連続区間において、3つの値を全て格納しておく必要がないため、完備辞書(データ構造11)のサイズの増大が抑制される。
 続いて、図2を用いて、本実施の形態における情報処理装置100の構成を更に具体的に説明する。図2は、本発明の実施の形態における情報処理装置100の構成を具体的に示すブロック図である。
 図2に示すように、本実施の形態における情報処理装置100は、データ構造11を格納する上述の記憶部10に加えて、計算部20と、入力受付部30と、出力部40とを備えている。本実施の形態では、情報処理装置100は、例えば、コンピュータに後述するプログラムを導入することによって構築される。この場合、情報処理装置100は、コンピュータを構成するオペレーティングシステムの一部として機能することができる。
 このうち、入力受付部30は、外部からの入力を受け付け、これを計算部20に出力する。出力部40は、計算部20による計算結果を外部に出力する。計算部20は、第1のセレクト計算部21と、第2のセレクト計算部22と、第1のランク計算部23と、第2のランク計算部24とを備えている。
 計算部20において、第1のセレクト計算部21は、自然数が入力されたときに、ビット列上の位置であって、先頭から当該位置までに含まれる「1(第1の値)」の個数が自然数と等しくなる第1のセレクト位置を特定する。また、第1のセレクト計算部21は、第1のセレクト位置を連続区間位置データ、rank1データ、及びrank0データを用いて、特定する。即ち、第1のセレクト計算部21は、ビット列Bに対してselect1(B,i)を実行する。
 また、第2のセレクト計算部22は、自然数が入力されたときに、ビット列上の位置であって、先頭から当該位置までに含まれる「0(第2の値)」の個数が自然数と等しくなる第2のセレクト位置を、連続区間位置データ、rank1データ、及びrank0データを用いて、特定する。即ち、第2のセレクト計算部21は、ビット列Bに対してselect0(B,i)を実行する。
 また、第1のランク計算部23は、ビット列上の位置が指定されたときに、連続区間位置データ、rank1データ、及びrank0データを用いて、指定された位置までに出現した「1(第1の値)」の出現数を特定する。即ち、第1のランク計算部23は、ビット列Bに対してrank1(B,i)を実行する。更に、第2のランク計算部24は、ビット列上の位置が指定されたときに、連続区間位置データ、rank1データ、及びrank0データを用いて、指定された位置までに出現した「0(第2の値)」の出現数を特定する。即ち、第2のランク計算部24は、ビット列Bに対してrank0(B,i)を実行する。
 ここで、図3及び図4を用いて、本実施の形態で用いられるデータ構造について更に具体的に説明する。図3は、対象となるビット列とそれから求められる各種値との一例を示す図である。図4は、図3に示すビット列を表現するためのデータ構造の一例を示す図である。
 図3の例では、データであるビット列Bは[001110011011]であり、1について3つの連続区間(ラン)を有している。また、各ランの開始位置は、2,7,10となっている。「開始位置」を示す行では、該当する開始位置の箇所に、出現順位が記載されている。また、「pos1」は、位置を表している。なお、本明細書では、ビット列Bの配列の添字は0から開始されるが、ランの序列は1番目からカウントされるので、0番目のランは存在しないものとする。
 また、図3において、「rank1」は、ビット列Bにおける各位置での先頭からの「1」の出現数、即ち、rank1の値を示している。「rank0」は、ビット列Bにおける各位置での先頭からの「0」の出現数、すなわちrank0の値を示している。「select1」は、その位置がselect1(B,i)の結果として返されるような、入力値iを示している。「select0」は、その位置がselect0(B,i)の結果として返されるような、入力値iを示している。
 そして、図4に示すように、本実施の形態では、連続区間位置データは、図3における「開始位置」のデータをビット列化して得られたデータである。また、rank1データは、図3における開始位置の「rank1」のデータをビット列化して得られたデータである。rank0データは、図3における開始位置の「rank0」のデータをビット列化して得られたデータである。なお、連続区間位置データを構成するビット列を「B1」、rank1データを構成するビット列を「Br1」、rank0データを構成するビット列を「Br0」と表記する。
 但し、情報処理装置100は、「rank1」及び「rank0」について、全ての連続区間の開始位置についてビット列化してしまうと、データ構造11のデータ量が増大してしまう。このため、本実施の形態では、データ構造11は、各連続区間について、開始位置と、rank1と、rank0との3つの値のうち、少なくとも2つの値が、連続区間位置データ、rank1データ、rank0データによって特定されるように構築されている。また、このとき、特定される少なくとも2つの値は、連続区間の位置(開始位置)によって変化するようになっている。
 具体的には、図4の例における連続区間位置データは、ビット列B上で、「1」が1個以上連続する連続区間の全部の位置を特定する。また、rank1データが「1」の出現数を特定した連続区間は、偶数番目に出現した連続区間と一致する。一方、rank0データが「0」の出現数を特定した連続区間は、奇数番目に出現した連続区間とする。
 なお、本実施の形態において、データ構造11は、図4に示す例に限定されることはない。例えば、データ構造は、1番目の連続区間では、rank1とrank0とを特定し、2番目の連続区間では、開始位置とrank0とを特定し、三番目の連続区間では、開始位置とrank1とを特定し、以後、この繰り返しが行われるように構築されていても良い。
 また、データ構造11が図4に示すものである場合は、第1のセレクト計算部21及び第2のセレクト計算部22は、次のように計算を行う。つまり、第1のセレクト計算部21は、まず、rank1データが特定する「1」の出現数に基づいて、rank1データにおいて「1」の出現数が特定されており、且つ、特定の対象となるselect1が存在又は近接する、連続区間を推定する。
 次に、第1のセレクト計算部21は、推定した連続区間に近接し、且つ、rank1データにおいて「1」の出現数が特定されていない連続区間について、連続区間位置データ及びrank0データに基づいて、「1」の出現数を特定する。そして、第1のセレクト計算部21は、特定した「1」の出現数を用いて、select1を特定する。
 また、第2のセレクト計算部22は、連続区間について、まず、rank0データが特定する「0」の出現数に基づいて、rank0データにおいて「0」の出現数が特定されており、且つ、特定の対象となるselect0が存在又は近接する、連続区間を推定する。
 次に、第2のセレクト計算部22は、推定した連続区間に近接し、且つ、rank0データにおいて「0」の出現数が特定されていない連続区間について、連続区間位置データ及びrank1データに基づいて、「0」の出現数を特定する。そして、第2のセレクト計算部22は、特定した「0」の出現数を用いて、select0を特定する。
 また、本実施の形態では、データ構造11は、連続区間位置データが特定する位置、rank1データが特定する「1」の出現数、rank0データが特定する「0」の出現数、それぞれを、単調増加する数列とみなすことによって圧縮されているのが良い。この場合、データ構造11は、圧縮された状態で記憶部10に記憶される。
[装置動作]
 次に、本発明の実施の形態における情報処理装置100の動作について図5を用いて説明する。図5は、本発明の実施の形態における情報処理装置の動作を示すフロー図である。以下の説明においては、適宜図1を参酌する。また、本実施の形態では、情報処理装置100を動作させることによって、情報処理方法が実施される。よって、本実施の形態における情報処理方法の説明は、以下の情報処理装置100の動作説明に代える。
 図5に示すように、まず、入力受付部30は、外部からの自然数の入力と要求される操作の入力とを受付け(ステップA1)、受付けた内容を計算部20に出力する。
 次に、計算部20は、要求された操作がselect1であるかどうかを判定する(ステップA2)。ステップA2の判定の結果、要求された操作がselect1である場合は、第1のセレクト計算部21が、記憶部10から、連続区間位置データ11、rank1データ12、及びrank0データ13を取得する。そして、第1のセレクト計算部21は、これらを用いてステップA1で受付けられた自然数についてselect1を計算する(ステップA3)。
 ステップA2の判定の結果、要求された操作がselect1でない場合は、計算部20は、要求された操作がselect0であるかどうかを判定する(ステップA4)。ステップA4の判定の結果、要求された操作がselect0である場合は、第2のセレクト計算部22が、記憶部10から、連続区間位置データ11、rank1データ12、及びrank0データ13を取得する。そして、第2のセレクト計算部22は、これらを用いてステップA1で受付けられた自然数についてselect0を計算する(ステップA6)。
 また、ステップA4の判定の結果、要求された操作がselect0でない場合は、計算部20は、要求された操作がrank1であるかどうかを判定する(ステップA5)。ステップA5の判定の結果、要求された操作がrank1である場合は、第1のランク計算部23が、記憶部10から、連続区間位置データ11、rank1データ12、及びrank0データ13を取得する。そして、第1のランク計算部23は、これらを用いてステップA1で受付けられた自然数についてrank1を計算する(ステップA7)。
 一方、ステップA5の判定の結果、要求された操作がrank1でない場合は、第2のランク計算部24が、記憶部10から、連続区間位置データ11、rank1データ12、及びrank0データ13を取得する。そして、第2のランク計算部24は、これらを用いてステップA1で受付けられた自然数についてrank0を計算する(ステップA8)。
 上述のステップA3、A6、A7、又はA8が実行されると、出力部40は、計算結果を受け取り、計算結果を外部に出力する(ステップA9)。このように、ステップA1~A9の実行により、データ構造11を用いて、select1、select0、rank1、rank0の操作が可能となる。
[実施の形態による効果]
 続いて、本実施の形態による効果について説明する。図4に示したように、本実施の形態では、ビット列Bに対して、3つの疎なビット列B1、Br1、Br0が、データ構造11として用意される。ビット列B1はランの開始位置においてのみ1となる疎なビット列である。
ビット列Br1は、偶数番目のランの開始位置におけるrank1の値を記憶するビット列である。すなわち、偶数番目のランの開始位置iについて、Br1 [rank1(B,i)] = 1としてセットし、それ以外の要素は0とする。このビット列の長さは、ビット列Bに含まれる「1」の個数mに等しい。また、このビット列には、b/2個の「1」が含まれている。
 同様に、Br0を定義する。すなわち、奇数番目のランの開始位置iについて、Br0 [rank0(B,i)] = 1としてセットし、それ以外の要素は0とする。このビット列の長さは、Bに含まれる「0」の数(n-m)に等しい。また、このビット列には、b/2個の1が含まれている。
 そして、本実施の形態において、データ構造11のサイズ、すなわち、完備辞書のサイズは、3つの疎なビット列B1、ビット列Br1、及びビット列Br0それぞれの完備辞書のサイズの合計となる。具体的には、ビット列B1の完備辞書のサイズは、長さnでb個の1を含むため、b log(n/b)+2b +o(b)ビットである。また、ビット列Br1の完備辞書のサイズは、長さmでb/2個の1を含むため、(b/2) log(2m/b) + 2(b/2) + o(b)ビットである。ビット列Br0の完備辞書のサイズは、長さ(n-m)でb/2個の1を含むため、(b/2) log(2(n-m)/b) + 2(b/2) + o(b)ビットである。従って、これらを合計すると、完備辞書(データ構造11)の合計のサイズSは、下記の数10に示す通りとなる。
Figure JPOXMLDOC01-appb-M000010
 ここで、log(n/b)と、log(2m/b)と、log(2(n-m)/b)とは、それぞれ略等しい大きさであると見なすことができる。たとえば、m=n/2の場合、すなわち、長さnのビット列のうち、半分が「1」であり、半分が「0」であるような場合はこれらの数はlog(n/b)に等しくなる。これらの値をCとおくと、本実施の形態における完備辞書のサイズは、2b(C+2)+o(b)ビットとなる。これはすなわち、select1だけをサポートする非特許文献2の完備辞書とほぼ同じサイズでありながら、select1とselect0の両方の操作をサポートできることを示している。さらに言えば、これは、本実施の形態における完備辞書のサイズは、select1とselect0の両方をサポートするようにした非特許文献2の完備辞書のサイズの約(2/3)となることを示している。すなわち、本実施の形態によれば、完備辞書に対してselect1とselect0の両方の操作をサポートする機能を付与しつつ、その大きさを従来の約(2/3)倍に縮小することができる。
[変形例]
 上述した例では、第1の値が「1」、第2の値が「0」、第1のデータが位置を特定する連続区間が「1」の連続区間であるが、本実施の形態は、この例に限定されるものではない。ビット列の1と0とは交換可能であるため、1と0とを反転させ、第1の値が「0」、第2の値が「1」、第1のデータが位置を特定する連続区間が「0」の連続区間であっても良い。この場合であっても、上述した効果と全く同じ効果を得ることができる。
 また、図4の例では、連続区間位置データは、連続区間の開始位置を保持している。しかし、本実施の形態では、前後を入れ替えることができ、連続区間位置データは、連続区間の開始位置の代わりに終了位置を保持していても良い。この場合であっても、同様の効果が得られる。更に、図4の例では、偶数番目のランについてrank1が保持され、奇数番目のランについてrank0が保持されているが、本実施の形態では、この奇数と偶数の関係が入れ替えられていても良く、この場合でも、同様の効果が得られる。
[プログラム]
 本実施の形態におけるプログラムは、コンピュータに、図5に示すステップA1~A9を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態における情報処理装置100と情報処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、入力受付部30、計算部20、及び出力部40として機能し、処理を行なう。また、記憶部10は、コンピュータに備えられた、メモリ、ハードディスク等の記憶装置に、これらを構成するデータファイルを格納することによって実現されている。
 ここで、本実施の形態におけるプログラムを実行することによって、情報処理装置100を実現するコンピュータについて図6を用いて説明する。図6は、本発明の実施の形態における情報処理装置を実現するコンピュータの一例を示すブロック図である。
 図6に示すように、コンピュータ110は、CPU111と、メインメモリ112と、記憶装置113と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
 CPU111は、記憶装置113に格納された、本実施の形態におけるプログラム(コード)をメインメモリ112に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ112は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
 また、記憶装置113の具体例としては、ハードディスクの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。
 データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
 また、記録媒体120の具体例としては、CF(Compact Flash)及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD-ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
 以下に、図1~図6に示した本実施の形態の情報処理装置の具体例について説明する。
その際、本実施の形態におけるデータ構造(完備辞書)が、完備辞書として利用可能であること、すなわちaccess、rank、selectの操作が行えることを中心に説明する。
 以下の説明では、計算を簡単にするための工夫として、長さnのビット配列Bが与えられたとき、n+1番目の要素B[n]から仮想的なランが始まっているものと見なして、B[n]がランの開始位置として記録される。これは、後述するrank及びselectの計算処理において、例外処理を行わないようにするためである。
 また、後述する計算では、a番目のランとa+1番目のランの開始位置を計算する処理が何度も出てくる。ここで、B[n]から新しいランが始まっていると見なして登録しておくことで、a+1番目のランが存在しない場合の例外処理を行うことが回避される。なお、このような仮想的なランを想定することで、ランの数は1つ増える。この増加した仮想的なランは、配列全体からみると無視できるほど小さいため、完備辞書のサイズの計算からは除外される。
 ここで、図3に示したビット列Bを想定する。図3に示したビット列Bは、長さ12のビット列のうち、7個の1と5個の0とで構成されている。このビット列Bにおけるランの開始位置は、B[2],B[7],B[10],B[12]の4箇所である。なお、B[12]から始まるランは、実際のビット列Bには存在しない仮想上のランである。
 ビット列Bにおいて、access(B,i)とrank1(B,i)とは、計算部20によって、以下のように、ほぼ同様の操作で計算される。まず、a= rank1(B1, i+1)を用いて、B[0,i]に含まれるランの開始位置の数aが得られる(図4参照)。
 a=0であった場合は、access(B,i)とrank1(B,i)とはともに0であるので、計算部20の計算は終了する。一方、a>0であった場合、計算部20は、a番目のランに着目する。引数として与えられた位置iは、a番目のランの上にあるか、a番目のランとa+1番目のランとの間にあるかのどちらかである。位置iとこれらのランとの相対的な位置関係が求まれば、計算部20はaccessとrank1の値を計算できる。
 また、a番目のランの開始位置をsa、a番目のランが終了して0になる位置をea、a+1番目のランの開始位置をsa+1とする。このとき、sa≦i<sa+1およびsa<ea≦sa+1が常に成り立つ。B[sa,ea)の範囲は全て1であり、B[ea,sa+1)の範囲は全て0である。
 そして、上記の場合において、i<eaであれば、位置iはa番目のランの上にあることにある。すなわち、access(B,i)=B[i]=1である。一方ea≦iであれば、位置iは、a番目のランとa+1番目のランとの間に位置する。すなわち、access(B,i)=B[i]=0である。
 ここで、aが奇数の場合とaが偶数の場合とに場合分けする。aが奇数なら、以下の数11によって、eaを効率的に計算できる。なお、本明細書の数式では、sa をsa と、sa+1をsa+1と、Br0をBr0と、Br1をBr1と表現する。
Figure JPOXMLDOC01-appb-M000011
 また、上記の数11では、以下の事実が用いられている。すなわち、[sa , ea)の範囲には1しかないため、rank0(B,ea)=rank0(B,sa)が成り立つ。同様に、[ea, sa+1)の範囲には0しかないため、rank1(B,ea)=rank1(B,sa+1)が成り立つ。また、saにおけるrank0の値はBr0における「(a-1)/2+1」番目の1の位置として記録される。sa+1におけるrank1の値はBr1における「(a-1)/2+1」番目の1の位置として記録される。よって、それぞれの完備辞書でselect1を計算した結果の和を取れば、eaの値が計算される。
 こうしてeaの値が求まったので、あとは前述の通り、iの値と比較することで、access(B,i)の値が計算される。
 rank1(B,i)を計算するには、計算部20は、同じように場合分けをすればよい。i< eaであれば、以下の数12によって、求める答えを計算できる。
Figure JPOXMLDOC01-appb-M000012
 上記数12によって答えが計算できるのは、[sa,i)の間は、全て1であることが保証されているからである。rank0(B,sa)は、eaを計算するときに計算済みであるため、2つの値を引き算するだけでよい。
 一方、 ea <=iであれば、以下の数13によって、求める答えを計算できる。
Figure JPOXMLDOC01-appb-M000013
 上記数13によって答えが計算できるのは、[sa,ea)の間は全て1であるのに対して、[ea,i)の間は全て0であるからである。なお、rank1(B,sa+1)の値はeaを計算するときに計算済みである。
 以上により、aが奇数の場合は、access(B,i)とrank1(B,i)が計算できることが示された。
 ここで、図3に示したビット列Bを用いて、aが奇数になる場合の具体的な計算例を以下に示す。また、この計算例では、i=5とする。すなわち、access(B,5)またはrank1(B,5)を求めたいとする。
 この場合、a= rank1(B1,5+1)=1であり、奇数である。従って、a=1番目のランと、a+1=2番目のランに注目する。従って、eaは下記の数14に示す値となる。
Figure JPOXMLDOC01-appb-M000014
 上記の数15より、ea ≦iが成り立つことが分かるので、位置iは、1番目のランと2番目のランとの間となる。すなわち、access(B,i)=B[i]=0である。更に、rank1は下記の数15に示す値となる。
Figure JPOXMLDOC01-appb-M000015
 続いて、aが偶数の場合の計算方法を以下に説明する。まず、位置saと位置sa+1との値を求める。sa=select1(B1,a-1)、sa+1=select1(B1,a)となる。ここで、ビット列B1としては、非特許文献1に記載された疎なビット列の完備辞書が用いられているため、aの値は、saとsa+1の値を探索することなく、計算できることに注意する。何故なら、この完備辞書においては、a個目の要素とa+1個目の要素とは記憶領域上で隣接して記憶されているため、再度探索する必要がないからである。このとき、もし、sa=iであった場合、iがランの開始位置であり、B[i]=1である、と分かるので、これ以上計算しなくともaccess(B,i)=1であると分かる。
 saとsa+1の値を具体的に求めた後は、以下の数16によって、eaの値が具体的に計算される。
Figure JPOXMLDOC01-appb-M000016
 こうして、eaの値が求まったので、後は、計算部20は、上述の通り、eaの値とiの値とを比較することで、access(B,i)の値を計算する。
 また、rank1(B,i)の計算は、aが奇数の場合の計算と同様に行われる。すなわち、i<eaであれば、rank1(B,i)=i-rank0(B,sa)で求める答えが計算できる。一方、ea≦iであれば、rank1(B,i)=rank1(B,sa+1)となる。
 以上のように、データ構造11を用いれば、計算部20は、accessとrank1とを計算することができる。実質的には、計算部20は、ビット列B1上でrank1を1回計算し、ビット列Br1上でselect1を1回計算し、ビット列Br0上でselect1を1回計算することになる。また、rank0(B,i)は、「i - rank1(B,i)」に等しいので、rank1の値から簡単に計算できる。
 ここで、図3に示したビット列Bを用いて、aが偶数になる場合の具体的な計算例を以下に示す。また、この計算例では、i=9とする。すなわちaccess(B,9)又はrank1(B,9)を求めたいとする。
 この場合、a= rank1(B1,9+1)=2であり、偶数である。従って、a=2番目のランと、a+1=3番目のランに注目する。
 まず、位置saと位置sa+1の値を求める。sa=select1(B1,a-1)= select1(B1,1)=7、およびsa+1=select1(B1,a) = select1(B1,2)=10である。従って、eaは下記の数17に示す値となる。
Figure JPOXMLDOC01-appb-M000017
 上記の数17より、ea≦iが成り立つので、access(B,i)=B[i]=0である。更に、rank1は下記の数18に示す値となる。
Figure JPOXMLDOC01-appb-M000018
 続いて、ビット列Bにおけるselect1(B,i)の計算方法について、図7を用いて以下に説明する。図7は、本発明の実施例におけるselect1(B,i)の計算方法を概略的に説明する図である。まず、計算部20は、a=rank1(Br1,i+1)を求める。これは、偶数番目のランであって、そのランの開始位置におけるrank1の値がiを超えないランのなかで、その数が最大となるようなランが、(偶数番目のランのなかで数えて)何番目であるかを求めるためである。また、このようなランは、偶数番目のランの中では、a番目であるが、奇数番目と偶数番目と合わせた全体のランの中では、a*2番目である。
 ここで、図7にも示す、(a*2)番目、(a*2+1)番目、(a*2+2)番目という3つのランに注目する。目的となるiは、(a*2)番目のラン、及び(a*2+1)番目のランのどちらかの上に存在する。どちらのランの上にあるかは、(a*2+1)番目のランの開始位置sa*2+1におけるrank1の値、すなわちb=rank1(B, sa*2+1)と、iとを比較すればよい。ただし、(a*2+1)番目のランの開始位置におけるrank1の値は、奇数番目なのでデータ構造11(完備辞書)には直接保存されていないので、計算部20は、位置とrank0の値から、bを算出する必要がある。bの値は、以下の数19を用いることで計算できる。また、このとき、下記の数19における、(a*2+1)番目のランの開始位置におけるrank0の値c(=rank0(B, sa*2+1))が保持される。
Figure JPOXMLDOC01-appb-M000019
 上記数19によって、bが求まるので、計算部20は、iとbとを比較する。比較の結果、i<bであれば、求める位置はa*2番目のランの上に存在する。このランの開始位置は、sa*2=select1(B1, a*2-1)で求められる。また、a*2番目のラン上の位置におけるrank1の値はd=rank1(B,sa*2)=select1(Br1, a-1 )で計算される。なお、初めにa=rank1(Br1,i+1)が計算された段階で、a番目の要素が見つけられているので、計算部20は、新たに探索をすることなく、この値を計算できる。求める答えは、sa*2+(i-d)である。
 一方、b<=iであれば、求める位置は(a*2+1)番目のランの上に存在する。従って、求める答えは、i+cである。何故なら、答えとなる位置よりも前には、i個の1とc個の0しか存在しないため、その位置はi+cとなるからである。
 以上のように、計算部20は、データ構造11を用いて、select1の答えを計算することができる。ところで、最初にaの値を計算するときに、a=0となることがあるが、この場合でも全く同じ計算で良い。この場合、(a*2)番目のランは存在しないため、iは必ず(a*2+1)番目のランの上に存在する。このとき上記のbは必ず0になるため、i<bとなることはない。
 また、本実施例では、計算部20が、一見何度も同じデータ構造11を呼び出しているように見えるが、一度発見した要素に隣接する要素を参照しているだけであるため、計算部20によるデータ構造11での探索は1回で済んでいる。すなわち、ビット列Br1でのrank1、ビット列B1でのselect1、ビット列Br0でのselect1の計3回である。
 ここで、図3に示したビット列Bを用いて、i=4であるときの、select1(B,4)を求める計算例について説明する。この場合、a=rank1(Br1,4+1)=1となるので、a*2=2、a*2+1=3となる。従って、求める位置は、2番目のランか3番目のランの上に存在することが分かる。ここで、計算部20によって、3番目のランの開始位置におけるrank1の値bを計算すると、下記数20に示す通りとなる。
Figure JPOXMLDOC01-appb-M000020
 上記数20においては、(a*2+1)番目のランの開始位置におけるrank0の値c(=rank0(B,sa*2+1) =5)が保持される。そして、i=4とb=5とが比較され、i<bが成り立つため、計算部20は、求める位置はa*2番目のランの上に存在すると判断する。また、このランの開始位置は、sa*2=select1(B1,a*2-1)=7である。この位置におけるrank1の値はd=rank1(B,sa*2)=select1(Br1, a-1 )=3である。従って、求める答えは、sa*2+(i-d) =7+(4-3)=8となる。もしi=6であるとすると、bの値までは同じだが、b≦iが成り立つため、答えは、i+c=6+5=11となる。
 また、計算部20は、select0(B,i)を、select1(B,i)と同様にして求めることができる。但し、偶数と奇数との関係、及びランと空白との関係が逆転する。まず、計算部20は、a=rank1(Br0,i+1)を求める。これは、奇数番目のランであって、そのランの開始位置におけるrank0の値がiを超えないランのなかで、その数が最大となるようなランが、(奇数番目のランのなかで数えて)何番目であるかを求めるためである。
 計算の結果、a=0であった場合、探しているi+1番目の0は、1番目のランよりも前にあることが分かる。これはB[0,i]の範囲が全て0であることを示している。よって、求める答えはselect0(B,i)=iである。以下では、a>0となる場合を考える。
 さて、この奇数番目のランの中ではa番目のランは、奇数番目と偶数番目と合わせた全体のランの中では、(a*2-1)番目である。従って、(a*2-1)番目、(a*2)番目、(a*2+1)番目という3つのランに注目する。
 目的となるiは、(a*2-1)番目のランと(a*2)番目のランとに挟まれた空白か、(a*2)番目のランと(a*2+1)番目のランとに挟まれた空白の、どちらかの上に存在する。どちらの空白の上にあるかは、(a*2)番目のランの開始位置sa*2におけるrank0の値、すなわちb=rank0(B,sa*2)とiとを比較すればよい。
 ただし、(a*2)番目のランの開始位置におけるrank0の値は、偶数番目なので完備辞書には直接保存されておらず、位置とrank1の値とから算出する必要がある。この値は、以下の数21を用いることで計算できる。
Figure JPOXMLDOC01-appb-M000021
 上記数21においては、a*2番目のランの開始位置におけるrank1の値c(=rank1(B,sa*2))が保持される。そして、iとbとを比較し、i<bであれば、求める位置は(a*2-1)番目のランと(a*2)番目のランとに挟まれた空白に存在する。その場合、求める答えはi+cである。何故なら、求める位置より前には、i個の0とc個の1が存在するからである。
 一方、b<=iであれば、求める位置は(a*2)番目のランと(a*2+1)番目のランとに挟まれた空白に存在する。ここで、(a*2+1)番目のランの開始位置におけるrank1の値をdとおくと、dは、以下の数22を用いることで計算できる。
Figure JPOXMLDOC01-appb-M000022
 求める答えは、i+dである。何故なら、求める位置より前には、i個の0とd個の1が存在するからである。
 ここで、図3に示したビット列Bを用いて、i=2であるときの、select0(B,2)を求める計算例について説明する。この場合、a=rank1(Br0,2+1)=1となるので、a*2-1=1、a*2=2となる。従って、求める位置は、1番目のランと2番目のランとに挟まれた空白、又は2番目のランと3番目のランとに挟まれた空白、のどちらかの上に存在することが分かる。ここで、2番目のランの開始位置におけるrank0の値bを計算すると、下記数23に示す通りとなる。
Figure JPOXMLDOC01-appb-M000023
 上記数23においては、a*2番目のランの開始位置におけるrank1の値c(=rank1(B,sa*2)=3)が保存される。そして、i=2とb=4とが比較され、i<bが成り立つため、計算部20は、求める位置はa*2-1番目のランとa*2番目のランとに挟まれた空白の上に存在すると判断する。結果、求める答えは、i+c=2+3=5である。
 また、i=4であった場合を考える。このとき、b=4までの計算は同じであるが、b≦iが成り立つため、計算部20は、求める位置はa*2番目のランと(a*2+1)番目のランとに挟まれた空白の上に存在すると判断する。ここで、(a*2+1)番目のランの開始位置におけるrank1の値をdとおく。dは、以下の数24によって計算される。
Figure JPOXMLDOC01-appb-M000024
 上記数24の計算結果から、求める答えは、i+d=4+5=9である。
 以上のように、実施の形態及び実施例に示した情報処理装置100は、データ構造(完備辞書)を用いて、access、rank1、rank0、select1、及びselect0の全ての操作を行うことができる。そして、どの操作が行われる場合でも、3つの疎なビット列で構築された完備辞書におけるrank又はselectを数回実行することで、目的の値が求まっている。すなわち、本実施例における計算量は、疎なビット列で構築された完備辞書のrank又はselectと同じオーダーの計算量となるので、処理は実用面で十分高速なものとなる。
 上述したように、非特許文献2に開示された技術では、rank1の値を保持するビット列は存在するが、rank0の値を保持するビット列が存在しておらず、select0を高速に計算することが不可能であった。これに対して、本実施例では、データ構造11において、rank1とrank0とを交互に記録することで、データ構造11のサイズを、非特許文献2に記載の完備辞書と略同じサイズとしながら、select0とselect1とを高速に計算することができる。
 上述の実施の形態及び実施例は、データ構造において、rank1の値を保存したものと見なすこともできるが、ランの長さを単進符号化したものと見ることもできる。但し、非特許文献2に記載の技術では、単純にランの長さを単進符号化したビット列を用いていたのに対して、上述の実施の形態及び実施例では、空白を挟んだ2つのランの長さを合計した値を単進符号化したビット列と、ランを挟んだ2つの空白の長さを合計した値を単進符号化したビット列との2つが用いられる。これは、同じ記号の連続した長さをそのまま符号化する、従来のランレングス圧縮と大きく異なる工夫点である。
 以上のように、本発明によれば、対象となるビット列について、完備辞書を用いた2種類のselect操作を可能にしつつ、完備辞書のサイズの増大を抑制することができる。本発明は、検索が必要なシステム、特に、ウェーブレット木構造を利用するシステムに有用である。
 以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
 この出願は、2014年3月31日に出願された日本出願特願2014-073545を基礎とする優先権を主張し、その開示の全てをここに取り込む。
 10 記憶部
 11 データ構造
 12 連続区間位置データ(第1のデータ)
 13 rank1データ(第2のデータ)
 14 rank0データ(第3のデータ)
 20 計算部
 21 第1のセレクト計算部
 22 第2のセレクト計算部
 23 第1のランク計算部
 24 第2のランク計算部
 30 入力受付部
 40 出力部
 100 情報処理装置
 110 コンピュータ
 111 CPU
 112 メインメモリ
 113 記憶装置
 114 入力インターフェイス
 115 表示コントローラ
 116 データリーダ/ライタ
 117 通信インターフェイス
 118 入力機器
 119 ディスプレイ装置
 120 記録媒体
 121 バス

Claims (21)

  1.  第1の値と第2の値とで構成されたビット列を表現するためのデータ構造を記憶した記憶手段を備え、
     前記データ構造は、
    前記ビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、
    前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、
    前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、
    を有している、
    ことを特徴とする情報処理装置。
  2.  各連続区間について、当該連続区間の位置と、前記第1の値の出現数と、前記第2の値の出現数との3つの値のうち、少なくとも2つの値が、前記第1のデータ、前記第2のデータ、又は前記第3のデータによって特定され、且つ、特定される前記少なくとも2つの値は、当該連続区間の位置によって変化する、
    請求項1に記載の情報処理装置。
  3.  前記第1のデータが、前記ビット列上で、第1の値が1個以上連続する連続区間の全部の位置を特定し、
     前記第2のデータが前記第1の値の出現数を特定した連続区間は、偶数番目に出現した前記連続区間と一致し、
     前記第3のデータが前記第2の値の出現数を特定した連続区間は、奇数番目に出現した前記連続区間と一致している、
    請求項2に記載の情報処理装置。
  4.  自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第1の値の個数が前記自然数と等しくなる第1のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、第1のセレクト計算手段と、
     自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第2の値の個数が前記自然数と等しくなる第2のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、第2のセレクト計算手段と、
    を更に備えている、請求項1~3のいずれかに記載の情報処理装置。
  5.  前記第1のセレクト計算手段が、
    前記第2のデータが特定する前記第1の値の出現数に基づいて、前記第2のデータにおいて前記第1の値の出現数が特定されており、且つ、特定の対象となる前記第1のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第2のデータにおいて前記第1の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第3のデータに基づいて、前記第1の値の出現数を特定し、そして、
    特定した前記第1の値の出現数を用いて、前記第1のセレクト位置を特定する、
    請求項4に記載の情報処理装置。
  6.  前記第2のセレクト計算手段が、
    前記第3のデータが特定する前記第2の値の出現数に基づいて、前記第3のデータにおいて前記第2の値の出現数が特定されており、且つ、特定の対象となる前記第2のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第3のデータにおいて前記第2の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第2のデータに基づいて、前記第2の値の出現数を特定し、そして、
    特定した前記第2の値の出現数を用いて、前記第2のセレクト位置を特定する、
    請求項4または5に記載の情報処理装置。
  7.  前記データ構造は、前記第1のデータが特定する前記位置、前記第2のデータが特定する前記第1の値の出現数、前記第3のデータが特定する前記第2の値の出現数、それぞれを、単調増加する数列とみなすことによって圧縮され、圧縮された状態で、前記記憶部に記憶されている、
    請求項1~6のいずれかに記載の情報処理装置。
  8.  第1の値と第2の値とで構成されたビット列を再現するためのデータ構造であって、
     前記ビット列上で、同じ値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、
     前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、
     前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、
    を有している、
    ことを特徴とするデータ構造。
  9.  前記第1のデータが位置を特定した連続区間と、前記第2のデータが前記第1の値の出現数を特定した連続区間と、前記第2のデータが前記第2の値の出現数を特定した連続区間とのうち、2つが一致している、又はそれぞれが互いに異なっている、
    請求項8に記載のデータ構造。
  10.  前記第1のデータが、前記ビット列上で、第1の値が1個以上連続する連続区間の全部の位置を特定し、
     前記第2のデータが前記第1の値の出現数を特定した連続区間は、偶数番目に出現した前記連続区間と一致し、
     前記第3のデータが前記第2の値の出現数を特定した連続区間は、奇数番目に出現した前記連続区間と一致している、
    請求項9に記載のデータ構造。
  11.  第1の値と第2の値とで構成されたビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、を有するデータ構造を用いた情報処理方法であって、
    (a)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第1の値の個数が前記自然数と等しくなる第1のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
    (b)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第2の値の個数が前記自然数と等しくなる第2のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
    を有する、ことを特徴とする情報処理方法。
  12.  各連続区間について、当該連続区間の位置と、前記第1の値の出現数と、前記第2の値の出現数との3つの値のうち、少なくとも2つの値が、前記第1のデータ、前記第2のデータ、又は前記第3のデータによって特定され、且つ、特定される前記少なくとも2つの値は、当該連続区間の位置によって変化する、
    請求項11に記載の情報処理方法。
  13.  前記第1のデータが、前記ビット列上で、第1の値が1個以上連続する連続区間の全部の位置を特定し、
     前記第2のデータが前記第1の値の出現数を特定した連続区間は、偶数番目に出現した前記連続区間と一致し、
     前記第3のデータが前記第2の値の出現数を特定した連続区間は、奇数番目に出現した前記連続区間と一致している、
    請求項12に記載の情報処理装置。
  14.  前記(a)のステップにおいて、
    前記第2のデータが特定する前記第1の値の出現数に基づいて、前記第2のデータにおいて前記第1の値の出現数が特定されており、且つ、特定の対象となる前記第1のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第2のデータにおいて前記第1の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第3のデータに基づいて、前記第1の値の出現数を特定し、そして、
    特定した前記第1の値の出現数を用いて、前記第1のセレクト位置を特定する、
    請求項11に記載の情報処理方法。
  15.  前記(b)のステップにおいて、
    前記第3のデータが特定する前記第2の値の出現数に基づいて、前記第3のデータにおいて前記第2の値の出現数が特定されており、且つ、特定の対象となる前記第2のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第3のデータにおいて前記第2の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第2のデータに基づいて、前記第2の値の出現数を特定し、そして、
    特定した前記第2の値の出現数を用いて、前記第2のセレクト位置を特定する、
    請求項11に記載の情報処理方法。
  16. コンピュータに、
    (a)当該コンピュータが備える記憶装置に、
    第1の値と第2の値とで構成されたビット列上で、前記第1の値又は前記第2の値が1個以上連続する連続区間の全部又は一部の位置を特定する、第1のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第1の値の出現数を特定する、第2のデータと、前記連続区間の一部について、前記ビット列上で、前記ビット列の先頭から当該連続区間までに出現した第2の値の出現数を特定する、第3のデータと、を有するデータ構造を格納する、ステップと、
    (b)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第1の値の個数が前記自然数と等しくなる第1のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
    (c)自然数が入力されたときに、前記ビット列上の位置であって、先頭から当該位置までに含まれる前記第2の値の個数が前記自然数と等しくなる第2のセレクト位置を、前記第1のデータ、前記第2のデータ、及び前記第3のデータを用いて、特定する、ステップと、
    を実行させるプログラム記録媒体。
  17.  各連続区間について、当該連続区間の位置と、前記第1の値の出現数と、前記第2の値の出現数との3つの値のうち、少なくとも2つの値が、前記第1のデータ、前記第2のデータ、又は前記第3のデータによって特定され、且つ、特定される前記少なくとも2つの値は、当該連続区間の位置によって変化する、
    請求項16に記載のプログラム記録媒体。
  18.  前記第1のデータが、前記ビット列上で、第1の値が1個以上連続する連続区間の全部の位置を特定し、
     前記第2のデータが前記第1の値の出現数を特定した連続区間は、偶数番目に出現した前記連続区間と一致し、
     前記第3のデータが前記第2の値の出現数を特定した連続区間は、奇数番目に出現した前記連続区間と一致している、
    請求項17に記載のプログラム記録媒体。
  19.  前記(b)のステップにおいて、
    前記第2のデータが特定する前記第1の値の出現数に基づいて、前記第2のデータにおいて前記第1の値の出現数が特定されており、且つ、特定の対象となる前記第1のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第2のデータにおいて前記第1の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第3のデータに基づいて、前記第1の値の出現数を特定し、そして、
    特定した前記第1の値の出現数を用いて、前記第1のセレクト位置を特定する、
    請求項16に記載のプログラム記録媒体。
  20.  前記(c)のステップにおいて、
    前記第3のデータが特定する前記第2の値の出現数に基づいて、前記第3のデータにおいて前記第2の値の出現数が特定されており、且つ、特定の対象となる前記第2のセレクト位置が存在又は近接する、連続区間を推定し、更に、
    推定した前記連続区間に近接し、且つ、前記第3のデータにおいて前記第2の値の出現数が特定されていない連続区間について、前記第1のデータ及び前記第2のデータに基づいて、前記第2の値の出現数を特定し、そして、
    特定した前記第2の値の出現数を用いて、前記第2のセレクト位置を特定する、
    請求項16に記載のプログラム記録媒体。
  21.  前記(a)のステップにおいて、前記データ構造は、前記第1のデータが特定する前記位置、前記第2のデータが特定する前記第1の値の出現数、前記第3のデータが特定する前記第2の値の出現数、それぞれを、単調増加する数列とみなすことによって圧縮され、圧縮された状態で、前記記憶装置に格納される、
    請求項16~20のいずれかに記載のプログラム記録媒体。
PCT/JP2015/001568 2014-03-31 2015-03-20 データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体 WO2015151444A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
EP15772790.0A EP3128443A4 (en) 2014-03-31 2015-03-20 Data structure, information processing device, information processing method, and program recording medium
JP2016511364A JP6276386B2 (ja) 2014-03-31 2015-03-20 データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体
US15/127,479 US10789227B2 (en) 2014-03-31 2015-03-20 Data structure, information processing device, information processing method, and program recording medium

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2014073545 2014-03-31
JP2014-073545 2014-03-31

Publications (1)

Publication Number Publication Date
WO2015151444A1 true WO2015151444A1 (ja) 2015-10-08

Family

ID=54239793

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2015/001568 WO2015151444A1 (ja) 2014-03-31 2015-03-20 データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体

Country Status (4)

Country Link
US (1) US10789227B2 (ja)
EP (1) EP3128443A4 (ja)
JP (1) JP6276386B2 (ja)
WO (1) WO2015151444A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6123088B1 (ja) * 2016-02-25 2017-05-10 楽天株式会社 ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9792308B2 (en) * 1998-12-11 2017-10-17 Realtime Data, Llc Content estimation data compression
US6208275B1 (en) * 1999-06-01 2001-03-27 William S. Lovell Method and apparatus for digital concatenation
US6975629B2 (en) * 2000-03-22 2005-12-13 Texas Instruments Incorporated Processing packets based on deadline intervals
US7784094B2 (en) * 2005-06-30 2010-08-24 Intel Corporation Stateful packet content matching mechanisms
US20080040345A1 (en) * 2006-08-07 2008-02-14 International Characters, Inc. Method and Apparatus for String Search Using Parallel Bit Streams
US8392174B2 (en) * 2006-08-07 2013-03-05 International Characters, Inc. Method and apparatus for lexical analysis using parallel bit streams
US7961960B2 (en) * 2006-08-24 2011-06-14 Dell Products L.P. Methods and apparatus for reducing storage size
US8453032B2 (en) * 2010-04-21 2013-05-28 General Electric Company Energy and space efficient detection for data storage
TWI432964B (zh) * 2011-08-15 2014-04-01 Phison Electronics Corp 金鑰傳送方法、記憶體控制器與記憶體儲存裝置
EP2830225A4 (en) * 2012-03-19 2015-12-30 Fujitsu Ltd PROGRAM, COMPROMISED DATA PRODUCTION PROCESS, DECOMPRESSION PROCESS, INFORMATION PROCESSING DEVICE AND RECORDING MEDIUM

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
DAISUKE OKANOHARA: "Large-Scale String Processing:Theory and Practice", IEICE TECHNICAL REPORT, vol. 110, no. 76, 7 June 2010 (2010-06-07), pages 15 - 22, XP008184390 *
DAISUKE OKANOHARA: "Succinct Data Structure", IPSJ MAGAZINE, vol. 53, no. 5, 15 April 2012 (2012-04-15), pages 504 - 512, XP008184378 *
KUNIHIKO SADAKANE: "Succinct Data Structures for Large-Scale Data Processing", IPSJ MAGAZINE, vol. 48, no. 8, 15 August 2007 (2007-08-15), pages 899 - 902, XP008184377 *
See also references of EP3128443A4 *
VELI MAKINEN ET AL.: "Storage and Retrieval of Highly Repetitive Sequence Collections", JOURNAL OF COMPUTATIONAL BIOLOGY, vol. 17, no. 3, 8 April 2010 (2010-04-08), pages 281 - 308, XP055229647, Retrieved from the Internet <URL:http://jltsiren.kapsi.fi/papers/Maekinen2010.pdf> *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6123088B1 (ja) * 2016-02-25 2017-05-10 楽天株式会社 ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法
WO2017145317A1 (ja) * 2016-02-25 2017-08-31 楽天株式会社 ブロック符号化装置、ブロック復号化装置、情報処理装置、プログラム、ブロック符号化方法及びブロック復号化方法
US11212528B2 (en) 2016-02-25 2021-12-28 Rakuten Group, Inc. Bit string block encoder device, block decoder device, information processing device, program, block encoding method and block decoding method

Also Published As

Publication number Publication date
US20170132262A1 (en) 2017-05-11
US10789227B2 (en) 2020-09-29
JP6276386B2 (ja) 2018-02-07
JPWO2015151444A1 (ja) 2017-04-13
EP3128443A1 (en) 2017-02-08
EP3128443A4 (en) 2017-11-29

Similar Documents

Publication Publication Date Title
US10025773B2 (en) System and method for natural language processing using synthetic text
EP3120266B1 (en) Ozip compression and decompression
US20080133565A1 (en) Device and method for constructing inverted indexes
JP2020518207A (ja) 基本データシーブの使用によるデータの無損失削減、ならびに基本データシーブを使用して無損失削減されたデータに対する多次元検索およびコンテンツ連想的な取出しの実行
TW202147787A (zh) 利用主要資料的局部性來有效率檢索已使用主要資料篩而被無損地縮減的資料
JP2007508753A (ja) データ圧縮システム及び方法
JP6048251B2 (ja) データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム
JP3714935B2 (ja) 改善されたハフマンデコーディング方法及び装置
JP6846426B2 (ja) 音声データおよびブロック処理ストレージシステム上に記憶されたデータの削減
KR100495593B1 (ko) 파일 처리 방법, 데이터 처리 장치, 및 기억 매체
KR101842420B1 (ko) 정보 처리 장치 및 데이터 관리 방법
JP6276386B2 (ja) データ構造、情報処理装置、情報処理方法、及びプログラム記録媒体
CN114518841A (zh) 存储器中处理器和使用存储器中处理器输出指令的方法
US8463759B2 (en) Method and system for compressing data
JP6805927B2 (ja) インデックス生成プログラム、データ検索プログラム、インデックス生成装置、データ検索装置、インデックス生成方法、及びデータ検索方法
TW202030621A (zh) 已使用主要資料篩而被無損地縮減的資料之有效率擷取
US9595291B1 (en) Columnar data storage on tape partition
US10037148B2 (en) Facilitating reverse reading of sequentially stored, variable-length data
JP2011033806A (ja) 言語モデル圧縮装置、言語モデルのアクセス装置、言語モデル圧縮方法、言語モデルのアクセス方法、言語モデル圧縮プログラム、言語モデルのアクセスプログラム
US9059728B2 (en) Random extraction from compressed data
JP5736589B2 (ja) 数列データ検索装置、数列データ検索方法及びプログラム
US10810180B1 (en) Methods and systems for compressing data
JP2015159352A (ja) データ圧縮装置、データ圧縮方法、及びプログラム
JP2004213113A (ja) 配列圧縮方法
US7893851B2 (en) Encoding apparatus, method, and processor

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 15772790

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2016511364

Country of ref document: JP

Kind code of ref document: A

WWE Wipo information: entry into national phase

Ref document number: 15127479

Country of ref document: US

REEP Request for entry into the european phase

Ref document number: 2015772790

Country of ref document: EP

WWE Wipo information: entry into national phase

Ref document number: 2015772790

Country of ref document: EP

NENP Non-entry into the national phase

Ref country code: DE