WO2009093290A1 - ビット列検索装置、検索方法及びプログラム - Google Patents

ビット列検索装置、検索方法及びプログラム Download PDF

Info

Publication number
WO2009093290A1
WO2009093290A1 PCT/JP2008/003266 JP2008003266W WO2009093290A1 WO 2009093290 A1 WO2009093290 A1 WO 2009093290A1 JP 2008003266 W JP2008003266 W JP 2008003266W WO 2009093290 A1 WO2009093290 A1 WO 2009093290A1
Authority
WO
WIPO (PCT)
Prior art keywords
node
search
array
tree
key
Prior art date
Application number
PCT/JP2008/003266
Other languages
English (en)
French (fr)
Inventor
Toshio Shinjo
Mitsuhiro Kokubun
Original Assignee
S.Grants Co., Ltd.
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 S.Grants Co., Ltd. filed Critical S.Grants Co., Ltd.
Publication of WO2009093290A1 publication Critical patent/WO2009093290A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/322Trees

Definitions

  • the present invention relates to a search device, a search method, and a program for searching for a desired bit string from a set of bit strings, and particularly to a technical field for improving search speed and the like by devising a data structure for storing bit strings. is there.
  • FIG. 1 shows an example of a Patricia tree used in the above-described conventional search process.
  • the Patricia tree node includes an index key, a check bit position of the search key, and left and right link pointers. Although not explicitly shown, it goes without saying that the node includes information for accessing the record corresponding to the index key.
  • the node 1750a holding the index key “100010” is the root node, and the check bit position is 0.
  • a node 1750b is connected to the left link 1740a of the node 1750a, and a node 1750f is connected to the right link 1741a.
  • the index key held by the node 1750b is “010011”, and the check bit position 2030b is 1.
  • a node 1750c is connected to the left link 1740b of the node 1750b, and a node 1750d is connected to the right link 1741b.
  • the index key held by the node 1750c is “000111”, and the check bit position is 3.
  • the index key held by the node 1750d is “011010”, and the check bit position is 2.
  • the portion connected by a solid line from the node 1750c indicates the left and right link pointers of the node 1750c, and the left pointer 1740c not connected by the dotted line indicates that the column is blank.
  • the connection destination of the dotted line of the right pointer 1741c connected to the dotted line represents the address indicated by the pointer, and in this case indicates that the right pointer designates the node 1750c.
  • the right pointer 1741d of the node 1750d points to the node 1750d itself, and the node 1750e is connected to the left link 1740d.
  • the index key held by the node 1750e is “010010”, and the check bit position is 5.
  • the left pointer 1740e of the node 1750e points to the node 1750b, and the right pointer 1741e points to the node 1750e.
  • the index key held by the node 1750f is “101011”, and the check bit position 1730f is 2.
  • a node 1750g is connected to the left link 1740f of the node 1750f, and a node 1750h is connected to the right link 1741f.
  • the index key held by the node 1750g is “1000011”, and the check bit position 1730g is 5.
  • the left pointer 1740g of the node 1750g points to the node 1750a, and the right pointer 1741g points to the node 1750g.
  • the index key held by the node 1750h is “101100”, and the check bit position 1730h is 3.
  • the left pointer 1740h of the node 1750h points to the node 1750f, and the right pointer 1741h points to the node 1750h.
  • the check bit position of each node is configured to increase as the tree descends from the root node 1750a.
  • the check bit position of the search key held in each node is sequentially checked from the root node, and it is determined whether the bit value of the check bit position is 1 or 0, If it is 1, follow the right link, if it is 0, follow the left link. If the check bit position of the link destination node is not larger than the check bit position of the link source node, that is, if the link destination returns upward rather than downward (the reverse link indicated by the dotted line in FIG.
  • the index key of the link destination node and the search key are compared. As a result of the comparison, it is guaranteed that the search is successful if they are equal and the search is unsuccessful if they are not equal.
  • search processing using the Patricia tree has advantages such as being able to search only by checking the necessary bits and comparing the entire key only once, but there are always two links from each node. Increase in storage capacity due to the presence of the data, complicating judgment processing due to the presence of a back link, difficulty in data maintenance such as search processing delay and addition / deletion by comparing with an index key for the first time by returning by a back link, etc. There are disadvantages.
  • Patent Document 1 there is a technique disclosed in Patent Document 1 below as an attempt to eliminate the disadvantages of these Patricia trees.
  • the lower left and right nodes are stored in a continuous area, thereby reducing the storage capacity of the pointer, and a bit indicating whether or not the next link is a back link Is provided at each node to reduce the back link determination process.
  • the present applicant has disclosed in Japanese Patent Application No. 2006-187827 that the root node, the branch node arranged in the adjacent storage area, the leaf node, the branch nodes, or the leaf.
  • a tree used for bit string search consisting of node pairs between nodes, where the root node is a node representing the starting point of the tree, and when there is one node in the tree, it is a leaf node, and when there are two or more nodes in the tree Is a branch node
  • the branch node includes a discrimination bit position of a search key for performing a bit string search and position information indicating a position of a representative node which is one node of a link destination node pair, and the leaf node is a search Using a coupled node tree that includes an index key consisting of the target bit string Proposed Tsu door string search.
  • the basis for providing information services is the construction of a database and the extraction of information from the database, but the amount of data stored in the database is increasing and it is becoming extremely large.
  • the search method previously proposed by the present applicant enables high-speed search of the above-mentioned database that is becoming larger.
  • the coupled node tree corresponding thereto also has a conventional tree structure. Although it requires less storage capacity than the one, it is large.
  • the storage capacities of various storage means are limited, and in order to construct an economical system, it is necessary to use a combination of storage means with various access speeds and storage capacities. In particular, it is desirable that the cache memory can be used effectively.
  • the problem to be solved by the present invention is to provide a coupled node tree structure that enables a coupled node tree to be divided and arranged in a plurality of storage areas, and a search method using the same. .
  • the branch node of the coupled node tree of the present invention includes an identifier of a storage area in which a link destination node pair is stored and position information indicating the position of a representative node that is one node of the link destination node pair in the storage area. Including.
  • an arbitrary node of the coupled node tree is used as a search start node, and the branch node identifier of the storage area included in the branch node is determined according to the bit value of the search key at the discrimination bit position included in the branch node. It is stored in the leaf node by repeatedly linking to the representative node of the link destination node pair stored in the storage area shown or a node arranged in a storage area adjacent to the representative node until reaching the leaf node.
  • the index key is a search result key that is a search result by the search key of an arbitrary subtree of the tree having the search start node as a root node.
  • the index key is used as a search key, and the branch node in the branch node according to the bit value of the search key at the discrimination bit position included in the branch node From the root node to the leaf nodes in order to link to the representative node of the link destination node pair stored in the storage area indicated by the storage area identifier included in or the node located in the storage area adjacent thereto
  • the index key stored in the leaf node is repeatedly acquired as a search result key while storing the link path.
  • a bit string comparison is performed between the index key to be inserted and the index key obtained as a result of the search, and the relative position between the leading bit position that is a different bit value in the bit string comparison and the discrimination bit position of the branch node on the link path Insertion indicating the location information of the branch node including the identifier of the storage area to be inserted of the insertion node pair consisting of the leaf node to be inserted and the other node and the position information of the representative node of the insertion node pair in the storage area by the relationship Determines the position, searches for an empty storage area with an empty area that can store the insertion node pair, obtains an empty node pair, and stores the contents of the node pair of the upper storage area of the empty storage area in the empty node pair An operation for releasing a node pair in the upper storage area and obtaining an empty node pair is performed by the storage area in which the insertion node pair is inserted. Repeated until, depending on the search result key magnitude relationship between the search key, to determine
  • a search is performed using the key to be deleted, and the contents of the node constituting the same node pair as the node holding the index key to be deleted are linked to the node pair. This is done by writing to the original branch node and deleting the node pair.
  • the coupled node tree can be divided into a plurality of storage areas.
  • FIG. 1 It is a processing flowchart explaining the whole node insertion process including the insertion process of the root node in one embodiment of this invention. It is a figure explaining the processing flow of the search process which is the front
  • 10 is a diagram for explaining a state in which a state and an array of a coupled node tree and a search path block before insertion of a node are newly acquired in specific example 1 of the insertion process. It is a figure explaining the coupled node tree after the insertion process in the specific example 1 of an insertion process. In specific example 2 of an insertion process, it is a figure explaining the state which acquired the empty node pair in the array which the coupled node tree before insertion of a node, the state of a search path block, and the block number on a search path stack point. In specific example 2 of an insertion process, it is a figure explaining the state which moved the empty node pair and was able to insert an insertion node pair in an insertion position. In the specific example 2 of an insertion process, while inserting an insertion node pair into an insertion position, it is a figure explaining the state which updated the discrimination bit position of the branch node of an insertion position, and completed the insertion process.
  • the position of the representative node of the link destination held by the branch node can be the address information of the storage device, but an array that can store the larger storage capacity of the area occupied by the branch node or leaf node
  • the position of the node can be represented by an array number, and the amount of information of position information indicating the position of the representative node can be reduced.
  • FIG. 2A is a diagram illustrating a configuration example of a coupled node tree stored in an array according to an embodiment of the present invention.
  • node 101 is stored in the array element of array number 10 of array 100 arranged in the storage area identified by block number A.
  • the node 101 includes a node type 102, a discrimination bit position 103, a representative node number 104a, and a block number 104b.
  • the node type 102 is 0, indicating that the node 101 is a branch node. 1 is stored in the discrimination bit position 103.
  • the representative node number 104a stores the array node number 20 of the representative node of the link destination node pair, and the block number 104b stores A.
  • the array element number stored in the representative node number may be referred to as a representative node number.
  • the array element number stored in the representative node number may be represented by a code attached to the node or a code attached to the node pair.
  • the value stored in the discrimination bit position may be simply referred to as a discrimination bit position.
  • the node [0] 112 that is the representative node of the node pair 111 is stored in the array element of the array element number 20. Then, node [1] 113 paired with the representative node is stored in the next adjacent array element (array number 20 + 1).
  • the node [0] 112 is a branch node like the node 101. 0 is stored in the node type 114 of the node [0] 112, 3 is stored in the discrimination bit position 115, 30 is stored in the representative node number 116a, and B is stored in the block number 116b.
  • the node [1] 113 includes a node type 117 and an index key 118a.
  • the node type 117 stores 1 and indicates that the node [1] 113 is a leaf node.
  • the index key 118 stores “0001”. In the following, for simplicity of description, data stored in the index key may also be referred to as an index key.
  • the array 100 further stores a node pair counter 119, which stores 2 which is the number of node pairs stored in the array 100.
  • access destination information for accessing the record corresponding to the index key is naturally necessary.
  • the association between the index key and the access destination information may be performed, for example, by storing the access destination information corresponding to the index key in a storage area adjacent to the storage area storing the index key. In the following description, the access destination information is omitted.
  • a representative node may be represented by a node [0] and a node paired therewith may be represented by a node [1].
  • a node stored in an array element having a certain array number may be referred to as a node having the array number, and an array number of the array element in which the node is stored may be referred to as a node array number.
  • the array 120 identified by the value B of the block number 116b of the node [0] 112 described above includes a node pair counter 129, and a node pair composed of the node 122 and the node 123 stored in the array elements of the array numbers 30 and 31. 121 is stored.
  • the node pair counter 129 stores 1 which is the number of node pairs stored in the array 120.
  • the contents of the node pair 121 composed of the node 122 and the node 123 are omitted.
  • the 0 or 1 added to the array elements stored in the node [0] 112, the node [1] 113, the node 122, and the node 123 are linked to either node of the node pair when searching with the search key. It shows what to do.
  • the search key is linked to the node having the array number obtained by adding 0 or 1 which is the bit value at the discrimination bit position of the branch node in the preceding stage to the representative node number.
  • the array element number of the array element identified by the block number in which the link destination node is stored is obtained. be able to.
  • FIG. 2B is a diagram conceptually illustrating a tree structure of a coupled node tree.
  • the 6-bit index key shown is the same as that of the Patricia tree illustrated in FIG.
  • the root node is indicated by reference numeral 210a.
  • the root node 210a is a representative node of the node pair 201a arranged at the array element number 220 of the array 309a of the block number A.
  • a note pair 201b is arranged below the root node 210a, a node pair 201c and a node pair 201f are arranged below it, and a node pair 201h and a node pair 201g are arranged below the node pair 201f.
  • a node pair 201d is disposed below the node pair 201c, and a node pair 201e is disposed below the node pair 201d.
  • node pairs 201a, 201b, 201f and 201g are stored in an array 309a of block number A, and 4 is stored in the node pair counter 290a.
  • the node pair 201c and the node pairs 201d and 201e below it are stored in the array 309b of the block number B, and 3 is stored in the node pair counter 290b.
  • the node pair 201h is stored in the array 309c of block number C, and 1 is stored in the node pair counter 290c.
  • the code 0 or 1 added before each node is the same as the code assigned before the array element described in FIG.
  • the tree is traversed according to the bit value of the discrimination bit position of the search key, and the leaf node to be searched is found.
  • the node type 260a of the root node 210a is 0, indicating that it is a branch node, and the discrimination bit position 230a indicates 0.
  • the block number 240a is A, indicating that the link destination node pair 201b is arranged in the array 309a of the block number A.
  • the representative node number is 220a, which is the array element number of the array element of the array 309a stored in the representative node 210b of the node pair 201b.
  • the node pair 201b is composed of nodes 210b and 211b, and their node types 260b and 261b are both 0, indicating that they are branch nodes. 1 is stored in the discrimination bit position 230b of the node 210b, and the block number B of the array 309b is stored in the block number 240b. In the representative node number of the link destination, the array element number 220b of the array element of the array 309b in which the representative node 210c of the node pair 201c is stored is stored.
  • this node is a leaf node and therefore includes an index key. “000111” is stored in the index key 250c.
  • the node type 261c of the node 211c is 0, indicating that it is a branch node.
  • the discrimination bit position 231c is 2, the block number 241c is B, and the representative node number stores the array element number 221c of the array element 309b in which the representative node 210d of the node pair 201d is stored.
  • the node type 260d of the node 210d is 0, indicating that it is a branch node.
  • the discrimination bit position 230d is 5, the block number 240d is B, and the array number 220d of the array element of the array 309b in which the representative node 210e of the node pair 201e is stored is stored in the representative node number.
  • the node type 261d of the node 211d paired with the node 210d is 1, and “011010” is stored in the index key 251d.
  • the node types 260e and 261e of the nodes 210e and 211e of the node pair 201e are both 1, indicating that both are leaf nodes.
  • “010010” and “010011” are stored as index keys in the index keys 250e and 251e, respectively. Has been.
  • the array element number 221b of the array element of the array 309a in which the representative node 210f of the node pair 201f is stored is stored.
  • the node types 260f and 261f of the nodes 210f and 211f of the node pair 201f are both 0, and both are branch nodes. 5 and 3 are stored in the discrimination bit positions 230f and 231f, respectively. Further, A is stored in the block number 240f of the node 210f, and C is stored in the block number 241f.
  • the representative node number of the node 210f stores the array element number 220f of the array element of the array 309a in which the representative node 210g of the node pair 201g is stored, and the representative node number of the node 211f stores the node [ 0]
  • the array element number 221f of the array element of the array 309c stored in 210h is stored.
  • the node types 260g and 261g of the nodes 210g and 211g of the node pair 201g are both 1, indicating that both are leaf nodes, and “100010” and “1000011” are stored in the respective index keys 250g and 251g. .
  • the node type 260h and 261h of the node [0] 210h which is the representative node of the node pair 201h, and the node [1] 211h that is paired with the node [0] 210h are both 1, indicating that both are leaf nodes.
  • “250h” and “251h” “101011” and “101100” are stored.
  • the discrimination bit positions are 0, 1, 2,... From the left.
  • processing is started from the root node 210a using the bit string “100010” as a search key. Since the discrimination bit position 230a of the root node 210a is 0, it is 1 when the bit value of the discrimination bit position of the search key “100010” is 0 is seen.
  • the block number 240a is A, which indicates that the link destination node pair exists in the array 309a. Therefore, the node 211b stored in the array element of the array 309a having the array number obtained by adding 1 to the array number 220a storing the representative node number is linked.
  • the block number 240b is A, which indicates that the linked node pair exists in the array 309a. Therefore, a link is made to the node 210f stored in the array element of the array number 309a with the array number 309a obtained by adding 0 to the array element number 221b in which the representative node number is stored.
  • the block number 240f is A, which indicates that the linked node pair exists in the array 309a. Therefore, a link is made to the node 210g stored in the array element of the array number 309a with the array number 309a obtained by adding 0 to the array element number 220f in which the representative node number is stored.
  • node type 260g of the node 210g is 1, indicating that it is a leaf node, when the index key 250g is read and compared with the search key, both are “100010” and match. In this way, a search using a coupled node tree is performed.
  • the node pairs of the coupled node tree are divided and arranged in the storage area with priority given to the depth direction of the tree. Therefore, a search using the above-described search key “100010” as the search start node as the root node 210a can be executed only by accessing the array 309a.
  • the configuration of a coupled node tree is defined by a set of index keys.
  • the discrimination bit position of the root node 210a is 0 because the index keys illustrated in FIG.
  • the index key group whose 0th bit is 0 is classified under the node 210b, and the index key group whose 0th bit is 1 is classified under the node 211b.
  • the discrimination bit position of the node 211b is 2 because the 0th bit stored in the nodes 211h, 210h, 211g and 210g is all equal to 0 in the 1st bit of the index key, and is different for the first time in the 2nd bit. This reflects the nature of the set of index keys.
  • the nodes 210h and 211h are leaf nodes, and “101011” and “101100” are assigned to the index keys 250h and 251h, respectively. "Is stored.
  • node pair stored in the array 309c at the link destination of the branch node 211h, for example, and the discrimination bit position of the index key “101100” and the index key “101101” or “101110” stored in the leaf node 211h
  • the index key with a bit value of 0 is stored in node [0]
  • the index key with a bit value of 1 is stored in node [1].
  • the value of the node pair counter 290c is 2.
  • the logical structure of the coupled node tree is determined by the bit value at each bit position of each index key included in the set of index keys. Furthermore, since the node branches to a node having a bit value “1” and a node having a bit value “0” for each bit position having a different bit value, the node [1] side and the depth of the tree When the leaf nodes are traced with priority given to the direction, the index keys stored in them are “101100” of the index key 251h of the node 211h, “101011” of the index key 250h of the node 210h,. The key 250c is “000111” and is sorted in descending order.
  • the index keys are sorted and arranged on the tree.
  • the index key follows the route arranged on the coupled node tree. For example, if the search key is “101100”, the node 211h can be reached. Further, as can be imagined from the above description, even when “101101” or “101110” is used as a search key, the node 211h is reached, and an index key 251h “101100” is obtained as a search result key.
  • the third and fourth bits of the search key are not used in the link paths of the nodes 210a, 211b, and 210f, and the fifth bit of “100100” is 0.
  • the node 210g is reached in the same manner as when searching for “100010”. In this way, branching is performed using the discrimination bit position corresponding to the bit configuration of the index key stored in the coupled node tree.
  • FIG. 3 is a diagram for explaining a hardware configuration example for carrying out the present invention.
  • Search processing and data maintenance by the search device of the present invention are performed by the data processing device 301 including at least the central processing unit 302 and the cache memory 303 using the data storage device 308.
  • the main storage device 305, the external storage device 306, and the communication device 307 are connected to the data processing device 301 by a single bus 304, but the connection method is not limited to this.
  • the main storage device 305 can be in the data processing device 301
  • the search path stack 310 can be realized as hardware in the central processing unit 302.
  • the array 309a has an external storage device 306, a search path stack 310 in the main storage device 305, etc. It is clear that the hardware configuration can be appropriately selected according to the usable hardware environment, the size of the index key set, etc. It is.
  • a temporary storage area of the main storage device 305 corresponding to each process is used in order to use various values obtained during the process in subsequent processes.
  • a value stored or set in the primary storage area may be referred to as a temporary storage area name.
  • FIG. 4 is a flowchart showing a bit string search process according to an embodiment.
  • step S401a the block number of the array storing the search start node and the array element array number are acquired.
  • the search start node is designated by various applications or users who use the search process.
  • the block number and array number of the acquired search start node are set in a search start node setting area (not shown).
  • This search start node setting area is described in the above-mentioned “various values obtained during processing”. Is a temporary storage area corresponding to each process in order to be used in later processes.
  • search start node setting area instead of the expression “set in a search start node setting area (not shown)”, “get the search start node array number”, “set as search start node” or simply “start search” It may also be described as “set to node”. The same applies to other than the search start node.
  • step S402b the block number and array number acquired in the search path stack 310 are stored, and in step S403a, the array element corresponding to the block number and array number is read as a node to be referred to.
  • step S404 the node type is extracted from the read node, and in step S405, it is determined whether or not the node type is a branch node.
  • step S405 If it is determined in step S405 that the read node is a branch node, the process proceeds to step S406, where information on the discrimination bit position is extracted from the node, and in step S407, a bit value corresponding to the extracted discrimination bit position is obtained. Retrieve from search key.
  • step S408a the block number and representative node number are extracted from the node.
  • step S409 the bit value extracted from the search key and the representative node number are added, and the process returns to step S402b as a new array number.
  • step S410 the index key is extracted from the leaf node, and the process ends.
  • FIGS. 5 to 7E illustrate normal insertion processing
  • FIG. 8 illustrates root node insertion processing. Since the coupled node tree is generated by the root node insertion process and the normal insertion process, the description of the node insertion process is also the description of the coupled node tree generation process.
  • FIG. 5 is a diagram conceptually illustrating an insertion process, particularly a process of acquiring an empty node pair at the insertion position in the embodiment of the present invention.
  • the coupled node tree illustrated in FIG. 5 is a subtree of the coupled node tree shown in FIGS. 12C to 12E later. In FIG. 5, some reference signs are omitted, but they are all shown in FIG. 12C.
  • FIG. 5 (1) shows a state in which a search is performed with the insert key, the insertion position of the insert key is obtained, and an empty block that is an array having empty array elements is searched.
  • the value of the insert key 3270 is “01000”, only the bit position 1 is the value “1”, and the values of the other bit positions are “0”.
  • the coupled node tree includes a root node 3210b, and node pairs 3201c, 3201d, and 3201e that are serially connected to the root node 3210b.
  • Root node 3210b is arranged in the array element of array number 3220a of array 3309a whose block number is A.
  • the discrimination bit position is 2, the block number is B, and the representative node number is 3220b.
  • “2” is stored in the node pair counter 3390a of the array 3309a.
  • the array element of the array 3309a is used by a higher-level node pair (not shown).
  • the representative node of the node pair 3201c is a branch node, and is arranged in the array element of the array element number 3220b of the array 3309b whose block number is B.
  • the discrimination bit position is 3, the block number is B, and the representative node number is 3220c.
  • the node paired with the representative node is a leaf node, and “00100” is stored in the index key.
  • the representative node of the node pair 3201d is a branch node, and is arranged in the array element of the array element number 3220c of the array 3309b whose block number is B.
  • the discrimination bit position is 4, the block number is C, and the representative node number is 3220d.
  • the node paired with the representative node is a leaf node, and “00010” is stored in the index key. “1” is stored in the node pair counter 3390b of the array 3309b.
  • the representative node of the node pair 3201e is a leaf node, and is arranged in the array element of the array element number 3220c of the array 3309c whose block number is C.
  • the index key “00000” is stored.
  • the node paired with the representative node is a leaf node, and “00001” is stored in the index key.
  • “2” is stored in the node pair counter 3390c of the array 3309c.
  • the index key “00000” stored in the leaf node indicated by the thick frame is obtained as the search result key. Then, when a difference bit position that first becomes a different bit value is obtained by comparing bit strings from the higher order of the search result key and the insertion key, a value of 1 is obtained. From the relative size relationship between the difference bit position and each discrimination bit position, a root node 3210b indicated by a thick frame is obtained as the insertion position.
  • the insertion position is the root node 3210b means that a leaf node including an insertion key as an index key is paired with an array element indicated by the representative node number 3220b of the array of block number B of the root node that is a branch node.
  • the representative node of the insertion node composed of the formed nodes is arranged. That is, the array element that is actually inserted into the insertion node pair is the link destination of the branch node at the insertion position.
  • the maximum number of stored node pairs in each array is 2. Therefore, since the value of the node pair counter 3390b in the array 3309b of the block number B is 2 and indicates the maximum storage number, an empty block in which a lower node is arranged is searched, and an array 3309c (hereinafter referred to as a block) of the block number C is searched. (The same applies to other arrays.) The state in which the empty node pair 3201f is acquired from FIG. 5 (1) is shown.
  • the node pair including the node of the block B linked to the node of the block C including the empty node pair is moved to the block C to secure the empty node pair in the block B and inserted.
  • the node pair can be inserted at the insertion position.
  • the contents of the node pair 3201d of the block B shown in (1) of FIG. 5 are written to the empty node pair 3201f of the block C, and the array element in which the node pair 3201d is arranged is empty. That is, an empty node pair is secured in the block B where the insertion node pair is inserted. Therefore, the value of the node pair counter 3390b is decreased by 1 to 1. Further, the value of the node pair counter 3390c is increased by 1 to 2.
  • FIG. 5 (3) shows a state where the insertion node pair is inserted at the insertion position and the discrimination bit position of the branch node at the insertion position is updated to complete the insertion process. Since the insertion key “01000” is larger than the search result key “00000”, the leaf node including the insertion key as an index key is arranged in the node [1] of the node pair 3201d, and the root node 3210b which is the branch node of the insertion position The contents are written in the node [0] of the node pair 3201d. The discrimination bit position of the root node 3210b which is the branch node at the insertion position is updated to the value 1 of the difference bit position. The value of the node pair counter 3390b is updated to 2.
  • FIG. 6 is a diagram for explaining the outline of the processing flow of the entire insertion processing according to the embodiment of the present invention.
  • step S600 a coupled node tree is searched from the root node using an insertion key as a search key to obtain a search result key.
  • step S610 the insertion position of the insertion node pair is obtained.
  • step S630 an empty storage area having an empty area for a node pair is searched, and an empty node pair is acquired.
  • a detailed flow of step S630 will be described with reference to FIG. 7C.
  • the state shown in (1) of FIG. 5 is obtained by the processes in steps S600, S610, and S630 described above.
  • step S640 the empty node pair is moved to the insertion position of the insertion node pair. This process corresponds to the state shown in (2) of FIG. A detailed flow of step S640 will be described with reference to FIG. 7D.
  • step S660 an insertion key or the like is stored in the empty node pair to complete the insertion node pair. This process corresponds to the state shown in (3) of FIG. A detailed flow of step S660 will be described with reference to FIG. 7E.
  • FIG. 7A is a diagram for explaining the detailed processing flow of step S600 shown in FIG. 6 for obtaining a search result key by searching a coupled node tree from the root node using the insertion key as a search key. It is assumed that the insertion key is set as a search key.
  • step S701 the block number of the array where the root node is arranged and the array element number of the array element of the array are set in the search start node.
  • the block number A and the array element number 3220a are set in the search start node.
  • step S703 an index key as a search result key is obtained by the search process shown in FIG. In the example of FIG. 5, the index key “00000” is obtained.
  • step S705 it is determined whether the insertion key (search key) is equal to the index key (search result key). If they are equal, the processing is terminated as an insertion failure. If not, the process proceeds to step S711 shown in FIG. 7B.
  • FIG. 7B is a diagram for explaining the detailed processing flow of step S610 shown in FIG. 6 for obtaining the insertion position of the insertion node pair.
  • step S711 the bit string comparison between the insertion key and the index key obtained in step S703 is performed by, for example, exclusive OR, to obtain a difference bit string.
  • step S712 the bit position of the first non-matching bit viewed from the higher-order 0th bit is set as the difference bit position from the difference bit string obtained in step S711.
  • a CPU having a priority encoder can input a difference bit string to obtain a mismatched bit position. It is also possible to obtain the bit position (difference bit position) of the first non-matching bit by performing processing equivalent to that of the priority encoder in software. In the example shown in FIG. 5, 1 is set to the difference bit position.
  • step S713 the value of the stack pointer of the search path stack is set in the leaf position pointer.
  • the value set in the leaf position pointer is the value of the stack pointer indicating the block number C and the array element number 3220d of the search path stack. If the pointer value pointing to the stack area at the bottom of the search path stack is 0, the value set for the leaf position pointer is 3.
  • step S714 it is determined whether the stack pointer of the search path stack points to the array element number of the root node. If so, the process proceeds to step S720. If not, the process proceeds to step S715.
  • step S715 the stack pointer of the search path stack is returned by 1, and the block number and array number stacked there are extracted. Proceeding to step S716, the block number extracted at step S715 and the array element indicated by the array number are read from the array as nodes. Proceeding to step S717, the discrimination bit position is extracted from the node read out at step S716.
  • step S718 it is determined whether the discrimination bit position extracted in step S717 is higher than the difference bit position set in step S712.
  • the upper positional relationship is a position on the left side of the bit string, that is, a position where the value of the bit position is small.
  • step S718 If the determination result in step S718 is negative, the process returns to step S714 and is repeated until the determination in step S718 becomes affirmative or the determination in step S714 becomes affirmative. If the determination in step S718 is affirmative, in step S719, the stack pointer of the path search stack is advanced by 1, and the process proceeds to step S720.
  • step S720 the block number and array number pointed to by the stack pointer are extracted from the search path stack and set to the block number and array number at the insertion position.
  • step S721 the value of the search path stack pointer is set in the insertion position pointer, and the flow advances to step S731 shown in FIG. 7C.
  • block number A and array number 3210b are set as the block number and array number of the insertion position.
  • the value of the insertion position pointer is set to 0, which is the value of the pointer indicating the array element number of the root node, according to the above-described pointer value notation (hereinafter, this notation may be used without notice).
  • FIG. 7C is a diagram for explaining a detailed processing flow of step S630 shown in FIG. 6 for searching for an empty block having an empty array element used for a node pair and acquiring an empty node pair.
  • step S731 the block number of the insertion position set in step S720 is set as the block number.
  • the block number A is set as the block number here.
  • step S732 it is determined whether the value of the node pair counter in the array indicated by the block number is the upper limit value. If it is not the upper limit value, the process branches to step S736. If it is the upper limit value, the process proceeds to step S733 to determine whether the stack pointer value of the search path stack is equal to the value of the leaf position pointer. If these values are not equal, the process branches to step S734, the stack pointer of the search path stack is advanced by 1, the block number pointed to by the stack pointer is extracted, and the process returns to step S732.
  • step S735 If the value of the stack pointer in the search path stack is equal to the value of the leaf position pointer, the block number of the empty array is acquired from the block management in step S735, and the process proceeds to step S736.
  • the present invention is premised on the existence of block management for managing the vacancy of the array, and the block number of the array in the empty state is acquired from the block management. Further, the upper limit of the node pairs that can be stored in the array is also given by the block management, and it is determined whether or not there is an empty array by the value of the node pair counter.
  • step S736 the acquired block number is set in the destination block number of the node pair, and the process proceeds to step S741 shown in FIG. 7D.
  • the acquired block number set here is the block number of the insertion position set in step S731, the block number extracted in step S734, or the block number acquired in step S735.
  • the values of the node pair counter 3390a of the array 3309a of the block number A and the node pair counter 3390b of the array 3309b of the block number B are upper limit values
  • the value of the node pair counter 3390c of the array 3309c of the block number C Is not the upper limit value
  • the block number C is extracted from the search path stack and set to the block number of the destination of the node pair.
  • the pointer value of the search path stack is 3 indicating the block number C and the representative node number 3220d.
  • FIG. 7D is a diagram illustrating a detailed processing flow of step S640 illustrated in FIG. 6 in which the empty node pair is moved to the insertion position of the insertion node pair.
  • the link path of the search process executed in step S703 is traced back from the node arranged in the block number array (movement destination) from which the empty node pair was acquired,
  • the node pair (moving source) including the higher-order node arranged in the block number array different from the block number array from which the empty node pair is acquired is moved to the moving destination, and the moving source is set as the empty node pair. Repeat until an empty node pair is secured at the insertion position.
  • step S741 it is determined whether the stack pointer value of the search path stack is equal to the insertion position pointer value. If they are equal, the process branches to step S761 shown in FIG. 7D, and if not equal, the process proceeds to step S742.
  • step S742 the block number and array number pointed to by the stack pointer of the search path stack are extracted, and the stack pointer is returned by one.
  • step S743 it is determined whether the extracted block number matches the destination block number set in step S736. If they match, the process returns to step S741, and if they do not match, the process proceeds to step S744. In the example shown in FIG.
  • step S741 the stack pointer value of the search path stack is 3 and the destination block number is C in the first process of the process shown in FIG. 7D. Therefore, the process loops from step S741 to step S743 are made once before proceeding to step S744. At this time, the block number extracted in step S742 is B, and the value of the stack pointer of the search path stack is 1.
  • step S744 the block number extracted in step S742 is set as the block number of the movement source of the node pair, and the representative node number obtained from the array number extracted in step S742 is set as the representative node number of the movement source of the node pair.
  • the representative node number obtained from the array number extracted in step S742 because the array numbers of the node [0] and the node [1] are different by one, and it is determined which is larger or smaller. Is clear.
  • B is set as the block number of the movement source of the node pair
  • 3220c is set as the representative node number.
  • step S745 the array number of the representative node of the empty node pair is acquired from the array of block numbers of the destination node of the node pair set in step S736, and one node pair counter is added, and in step S746 The array element number of the representative node of the empty node pair acquired in step S745 is set as the representative node number of the destination of the node pair.
  • step S747 the contents of the pair of array elements pointed to by the block number of the node pair set in step S744 and the representative node number are read as node pairs, and in step S748, the contents of the read node pairs are read.
  • the node pair set in step S746 is written to the set of the array element pointed to by the block number of the destination and the representative node number.
  • an empty node pair 3201f is acquired from the array 3309c in which the block number of the destination of the node pair is C, and the array element number of the representative node is As shown in 5 (2), it is 3220c ′.
  • the node pair counter 3390c is incremented by one to become 1 to 2, and the contents of the pair of node elements (node pair 3201d) pointed to by the block number B from which the node pair is moved and the representative node number 3220c is the node pair. It is written in a set of array elements (node pair 3201f) pointed to by the destination block number C and the representative node number 3220c ′.
  • the parentheses (3201d) and (3220d) attached to the node pair 3201f and the representative node number 3220f indicate that the respective values are the same as the contents shown in (1) of FIG.
  • step S749 the block number and array number pointed to by the stack pointer of the search path stack are extracted.
  • step S750 the block number of the array element pointed to by the extracted block number and array number is stored in the block number.
  • the block number and the representative node number of the destination of the node pair are written in the representative node number.
  • step S751 the node pair pointed to by the block number of the movement source of the node pair and the representative node number is released, and the node pair counter is decremented by one.
  • step S752 the block number of the movement source of the node pair is set in the block number of the movement destination of the node pair, and the process returns to step S741.
  • the value of the stack pointer of the search path stack is 1, and block number B and array number 3220b are extracted.
  • the node pair 3201d pointed to by the block number B of the movement source of the node pair and the representative node number 3220c is released, and the node pair counter 3390b is decremented by 1 to be 1.
  • the block number B of the movement source of the node pair is set as the block number of the movement destination of the node pair.
  • step S741 when returning to step S741 for the first time, the stack pointer value of the search path stack is 1, so the value of the stack pointer of the search path stack is set to 0 via step S742, and then to step S743. Finally, since both of the block numbers to be compared are B, the process returns to step S741 again. At this time, since the value of the stack pointer of the search path stack is 0, which is equal to the value of the insertion position pointer, the process proceeds to step S761 shown in FIG. 7E.
  • FIG. 7E is a diagram for explaining the detailed processing flow of step S660 shown in FIG. 6 in which the insertion key or the like is stored in the empty node pair to complete the insertion node pair.
  • step S761 the block number of the destination of the node pair is set in the block number of the empty node pair, and then the process proceeds to step S762, where the empty node pair is determined from the array of block numbers of the empty node pair. The array element number of the representative node is acquired, and one node pair counter is added.
  • step S763 the size of the insertion key and the index key obtained in step S703 are compared. If the insertion key is large, a value 1 is obtained, and a Boolean value 0 is obtained.
  • step S764 the Boolean value obtained in step S763 is added to the representative node number set in step S762 to set the leaf node array number.
  • step S765 the array element number obtained by adding the logical negation value of the Boolean value obtained in step S763 to the array element number of the representative node set in step S762 is set as the array element number of the paired node.
  • the array element number set in step S764 is the array element number of the array element in which the leaf node including the insertion key as an index key is arranged.
  • the array element number set in step S765 is arranged by the node that forms a node pair with the leaf node. Of the array element to be processed.
  • step S766 a leaf is stored in the node type of the array element indicated by the block number of the empty node pair and the array number of the leaf node set in step S764, and an insert key is written in the index key.
  • step S767 the block number at the insertion position and the contents are read from the array element pointed to by the array number, and in step S768, the read contents are arrayed by the block number of the empty node pair and the array number set in step S765. Write to the element.
  • step S769 the block number of the insertion position and the branch of the array element pointed to by the array number are written in the node type, the difference bit bit position in the discrimination bit position, and the representative node number of the node pair to be inserted in the representative node number. The process is terminated.
  • FIG. 8 is a process flow diagram illustrating the entire node insertion process when an index key including a root node insertion process is inserted according to an embodiment of the present invention.
  • step S801 it is determined whether the block number and array number of the root node of the coupled node tree requested to be acquired have been registered. If registered, the normal insertion process described with reference to FIGS. 6 to 7E is performed.
  • step S802 a block number of an empty array is acquired from block management.
  • step S803 the array element number of the array element to be the representative node of the empty node pair is acquired from the array pointed to by the acquired block number, and one node pair counter is added.
  • step S804 the array element number obtained by adding 0 to the array element number obtained in step S803 is obtained (actually, it is equal to the array element number acquired in step S803). Further, in step S805, a leaf is written in the node type and an insertion key is written in the index key of the array element indicated by the block number and the array number obtained in step S804. Finally, in step S806, the block number and array number of the root node acquired in steps S802 and S804 are registered, and the process is terminated.
  • the index keys are sequentially extracted from the set, and the processing of FIGS. 8 and 6 to 7E is repeated, so that the couple of the present invention corresponding to the set of index keys is performed.
  • a node tree can be constructed.
  • FIG. 9 is a diagram for explaining the processing flow of search processing, which is the first stage of deletion processing. It is assumed that the index key to be deleted is specified as the deletion key.
  • step S901 the block number of the array in which the root node is arranged and the array element number of the array element in which the root node is arranged are set in the search start node.
  • step S902 the search process shown in FIG. 4 searches the array from the search start node using the delete key as a search key, and obtains an index key as a search result key.
  • step 903 the deletion key is compared with the index key. If they are not equal, the index key to be deleted does not exist in the coupled node tree, so the deletion fails and the process ends. If they are equal, the process proceeds to the next process, that is, the process of step S904 and subsequent steps in FIG.
  • FIG. 10 is a diagram for explaining the processing flow at the latter stage of the deletion processing.
  • step S904 it is determined whether two or more array element numbers are stored in the search path stack. The fact that two or more array numbers are not stored is, in other words, only one, and the array number is that of the array element in which the root node is stored. In that case, the process proceeds to step S912, and the array pointed to by the block number obtained in step S901 is released. In step S913, the registration of the block number and array number of the root node is deleted, and the process ends.
  • step S904 When it is determined in step S904 that two or more array element numbers are stored in the search path stack, the process proceeds to step S905, and the representative node number obtained in step S408a of the search process shown in FIG. 4 executed in step S902 is set.
  • An array element number is obtained by adding values obtained by inverting the bit values obtained in step S407. In this process, the array element number in which the node paired with the leaf node storing the index key to be deleted is obtained.
  • step S906 the contents of the array element having the array element number obtained in step S905 are read.
  • step S907 the stack pointer of the search path stack is returned by 1, and the block number and array element are extracted.
  • step S908 the contents of the array element read in step S907 are written in the block number obtained in step S907 and the array element indicated by the array number.
  • a branch node that is a link source to the leaf node storing the index key to be deleted is replaced with a node that is paired with the leaf node.
  • step S909 the node pair indicated by the block number and the representative node number obtained in step S408a shown in FIG. 4 is deleted, and the value of the node pair counter is decremented by one, and the process proceeds to step S910.
  • step S910 it is determined whether the value of the node pair counter is 0. If it is not 0, the process ends. If it is 0, in step S911, the array pointed to by the block number obtained in step S408a shown in FIG. Release and finish the process.
  • FIG. 11A is a diagram illustrating a coupled node tree before deletion of a node and a state of a search path stack in which search processing is executed in deletion processing.
  • the coupled node tree illustrated in FIG. 11A includes node pairs 1201a, 1201b, and 1201c.
  • the node pair 1201a and the node pair 1201b are arranged in an array 1309a of block number A, and the node pair 1201c is arranged in an array 1309b of block number B. Therefore, the value of the node pair counter 1390a in the array 1309a is 2, and the value of the node pair counter 1390b in the array 1309b is 1.
  • the root node 1210a which is the representative node of the node pair 1201a, is arranged in the array element of the array element number 1220 of the array 1309a, and the node type 1260a is 0, which is a branch node. 0 is held in the discrimination bit position 1230a, and A is held in the block number 1240a.
  • the representative node number holds 1220a, which is the array element number where the representative node 1210b of the node pair 1201b is arranged.
  • the representative node 1210b of the node pair 1201b is a branch node having the node type 1260b of 0, 2 is held in the discrimination bit position 1230b, and B is held in the block number.
  • the representative node number holds 1220b which is the array element number where the representative node 1210c of the node pair 1201c is arranged.
  • the node 1211b paired with the representative node 1210b has a node type 1261b of 1 and is a leaf node, and “10000” is stored in the index key 1251b.
  • the representative node 1210c of the node pair 1201c is a leaf node having a node type 1260c of 1, and “00000” is stored in the index key 1250c.
  • the node 1211c paired with the representative node 1210c has a node type 1261c of 1 and is a leaf node, and “00100” is stored in the index key 1251c.
  • the delete key 1270 “00100” is set.
  • the route searched from the root node 1210a using this deletion key as a search key is stacked on the search route stack 310.
  • the search path stack 310 pairs of array numbers and block numbers are stacked as (1220, A), (1220a, A), and (1220b + 1, B).
  • the link path is indicated by a node surrounded by a thick frame of the coupled node tree and a thick arrow.
  • FIG. 11A shows that the index key “00100” of the leaf node 1211c is obtained as a search result, and the leaf node 1211c becomes the deletion node to be deleted.
  • the stack pointer of the search path stack 310 indicated by the bold arrow points to the array element number 1220b + 1 and the block number B.
  • FIG. 11B is a diagram for explaining the state of the coupled node tree and the like after the deletion process is completed.
  • the contents of the node 1210c paired with the deletion node 1211c shown in FIG. 11A are written to the node 1210b pointed to by the block number A and the array element number 1220a stacked when the stack pointer of the search path stack 310 is returned by one.
  • the state is shown in FIG. 11B.
  • the parenthesis writing (1260c) of the node type 1260b indicates that the value of the node type 1260c is written in the node type 1260b.
  • the node pair 1201c consisting of the node 1210c whose contents are paired with the deleted node 1211c and whose contents are written in the most recent branch node 1210b is deleted, and the value of the node pair counter 1390b is decreased by one to zero. Therefore, the array 1309b of the block number B is released.
  • Specific example 1 is a case where there is no array element that secures an empty node pair in the array pointed to by the block number on the search path stack.
  • FIG. 12A is a diagram for explaining a state in which a coupled node tree before insertion of a node, a state of a search path block, and an array 2309b of block number B are newly acquired.
  • a coupled node tree including a node pair 2201a and a node pair 2201b is arranged in an array 2309a of block number A. Therefore, the value of the node pair counter 2390a in the array 2309a is 2.
  • the root node 2210a which is the representative node of the node pair 2201a, is arranged in the array element of the array element number 2220 of the array 2309a of the block number A.
  • the node type of the root node 2210a is 0, which is a branch node. 0 is held in the discrimination bit position 2230a, and A is held in the block number 2240a.
  • the representative node number holds 2220a which is the array element number where the representative node 2210b of the node pair 2201b is arranged.
  • the representative node 2210b of the node pair 2201b is a leaf node having a node type 2260b of 1, and “00001” is stored in the index key 2250b.
  • the node 2211b paired with the representative node 2210b has a node type 2261b of 1 and is a leaf node, and “10000” is stored in the index key 2251b.
  • the insertion key 2270 is set to “00000”.
  • a link path searched from the root node 2210a using this insertion key as a search key is indicated by a node surrounded by a thick frame of the coupled node tree and a thick arrow, and the index key “00001” of the leaf node 2210b as a search result. Is shown to be obtained.
  • pairs of array numbers and block numbers are stacked as (2220, A) and (2220a, A). Since the difference bit position between the insertion key and the search result key is 4, the stack pointer of the search path stack returned by 1 after the search process is advanced by 1 by the process of step S719 shown in FIG. 7B. As indicated by the arrows, it points to SEQ ID NO: 2220a and block number A. Therefore, since the block number of the insertion position is A and the array element number is 2220a, FIG. 12A shows that the leaf node 2210b is the insertion position.
  • FIG. 12A shows a state in which an empty node pair 2201c including a representative node 2210c and a node 2211c paired with the representative node 2210c is acquired from the array 2309b.
  • FIG. 12B is a diagram for explaining the coupled node tree after the insertion processing. Due to the magnitude relationship between the insertion key “00000” and the index key “00001” of the search result, the node [0] of the reserved empty node pair 2201c is a leaf node 2210c including the insertion key “00000” as the index key 2250c, and the node [ 1] with the search result key “00001” As a leaf node 2211c including the index key 2251c. Further, the value of the node pair counter 2390c is increased by 1 to 1.
  • the node 2210b at the insertion position becomes a branch node
  • the node type 2260b is updated to 0, 4 is stored as the difference bit position between the insertion key and the search result key in the discrimination bit position
  • B is stored in the block number 2240b.
  • the representative node number 2220b stores the array element number of the array element in which the representative node 2210c of the inserted node pair 2201c is arranged.
  • FIG. 12C, FIG. 12D, and FIG. 12E the specific example 2 of an insertion process is demonstrated.
  • Specific example 2 is a case where an array element that secures an empty node pair exists in the array indicated by the block number on the search path stack.
  • the coupled node tree illustrated in FIGS. 12C, 12D, and 12E is a partial tree of FIG. FIG. 5 shows a node 3211b that is paired with a node pair 3201a not shown and the node 3210b at the insertion position.
  • the other tree structure is the same as that shown in FIG.
  • FIG. 12C corresponds to the one shown in (1) of FIG. 5, and an empty node pair is acquired in the array indicated by the coupled node tree before the insertion of the node, the state of the search path block, and the block number on the search path stack. It is a figure explaining a state.
  • the root node 3210a which is the representative node of the node pair 3201a, is arranged in the array element of the array element number 3220 of the array 3309a of the block number A.
  • the node type 3260a of the root node 3210a is 0 and is a branch node. 0 is held in the discrimination bit position 3230a, and A is held in the block number 3240a.
  • the representative node number holds 3220a which is the array element number where the representative node 3210b of the node pair 3201b is arranged.
  • the node type 3261b of the node 3211b paired with the representative node 3210b is 1 indicating that it is a leaf node, and “10000” is stored in the index key 3251b.
  • “01000” is set in the insertion key 3270.
  • a link path searched from the root node 3210a using this insertion key as a search key is indicated by a node surrounded by a thick frame of the coupled node tree and a thick line arrow, and an index key “00000” of the leaf node 3210e as a search result.
  • the branch node 3210b and after are also the same as those shown in (1) of FIG.
  • combinations of array numbers and block numbers are stacked as (3220, A), (3220a, B), (3220b, B), (3220c, B), (3220d, C). .
  • the stack pointer of the search path stack 310 points to the block number C and the array element number 3220d of the array 3309c where the empty node pair found first exists, as indicated by the thick arrow in FIG. 12C.
  • the search start node is the node 3210a
  • the discrimination bit position 3230a is 0,
  • the block number 3240 is A
  • the representative node number 3220a points to the representative node of the node pair 3201b
  • the 0th bit of the insertion key The bit value of is zero. Therefore, in the search process of the insertion process, the root node 3210a is linked to the node 3210b.
  • the subsequent processing is almost the same as that described with reference to (1) of FIG. In the case shown in (1) of FIG.
  • step S720 shown in FIG. 12C the search start node is the node 3210a, the discrimination bit position is “0”, and the difference bit position value “1” is higher. Therefore, the process proceeds to step S720 via step S719. Accordingly, in both cases, the node 3210b is the insertion position and is the same, and thus the description thereof is omitted.
  • FIG. 12D is a diagram corresponding to the one illustrated in (2) of FIG. 5, and the node pair including the node of the block B linked to the node of the block C including the empty node pair is moved to the block C, and the block B In this figure, an empty node pair is secured and an insertion node pair can be inserted at the insertion position.
  • the arrangement state of each block number is as described for (2) in FIG.
  • the stack pointer of the search path stack 310 moves from the pointer indicating the block number C and array number 3220d of the array 3309c in which the first empty node pair found in FIG.
  • 3309b indicates a block number B and an array number 3220b which are returned by one from the pointer value indicating the block number B and the array element number 3220c of the node 3210c immediately above the node pair 3201d which secures the empty node pair.
  • the operation of returning this pointer value by 1 is executed in step S742 shown in FIG. 7D.
  • FIG. 12E is a diagram corresponding to the one illustrated in (3) of FIG. 5, and the insertion node pair is inserted at the insertion position, and the discrimination bit position of the branch node at the insertion position is updated to complete the insertion process. Indicates the state.
  • the arrangement state of each block number is as described in (3) of FIG.
  • the stack pointer of the search path stack 310 is equal to the insertion position pointer set in step S721 shown in FIG. 7B, and points to the block number A and the array element number 3220a.
  • the leaf node can include information indicating the location of the storage area in which the index key is stored instead of including the index key itself.
  • the apparatus for executing the bit string search method of the present invention can be constructed on the computer by the storage means for storing the coupled node tree and the program for causing the computer to execute the processing illustrated in FIG.
  • the program realizes, on the computer, identification means for branch nodes and leaf nodes, means for linking to either of the linked node pairs according to the discrimination bit positions of the branch nodes, and the like.
  • the apparatus for executing the index key insertion method or index key deletion method of the present invention can be constructed on a computer by a program that causes the computer to execute the processing illustrated in FIG. 6, FIG. 9 or FIG. . Therefore, the program and a computer-readable storage medium storing the program are included in the embodiment of the present invention. Furthermore, the data structure of the coupled node tree of the present invention is also included in the embodiment of the present invention.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

カップルドノードツリーを複数の格納区域に分割して配置する。カップルドノードツリーのブランチノードは、リンク先のノード対の格納された格納区域の識別子とその格納区域におけるリンク先のノード対の代表ノードの位置を示す位置情報を含む。カップルドノードツリーに新しくインデックスキーを含むリーフノードを挿入するときは、挿入するリーフノードの挿入位置から空ノード対を有する空格納区域を探索し、そこから空ノード対を挿入位置まで移動させてリーフノードを挿入する。

Description

ビット列検索装置、検索方法及びプログラム
 本発明はビット列の集合から所望のビット列を検索する検索装置、検索方法及びプログラムに関するものであり、特にビット列を記憶するデータ構造に工夫をして、検索速度等の向上を図る技術分野のものである。
 近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
 そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
 上記ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの一つとして、パトリシアツリーという木構造が知られている。
 図1は、上述の従来の検索処理に用いられているパトリシアツリーの一例を示すものである。パトリシアツリーのノードは、インデックスキー、検索キーの検査ビット位置、左右のリンクポインタを含んで構成される。明示はされていないが、ノードにはインデックスキーに対応するレコードにアクセスするための情報が含まれていることは勿論である。
 図1の例では、インデックスキー“100010”を保持するノード1750aがルートノードとなっており、その検査ビット位置は0である。ノード1750aの左リンク1740aにはノード1750bが接続され、右リンク1741aにはノード1750fが接続されている。
 ノード1750bの保持するインデックスキーは“010011”であり、検査ビット位置2030bは1である。ノード1750bの左リンク1740bにはノード1750cが、右リンク1741bにはノード1750dが接続されている。ノード1750cが保持するインデックスキーは“000111”、検査ビット位置は3である。ノード1750dが保持するインデックスキーは“011010”、検査ビット位置は2である。
 ノード1750cから実線で接続された部分はノード1750cの左右のリンクポインタを示すものであり、点線の接続されていない左ポインタ1740cは、その欄が空欄であることを示している。点線の接続された右ポインタ1741cの点線の接続先は、ポインタの示すアドレスを表しており、今の場合ノード1750cを右ポインタが指定していることを表している。
 ノード1750dの右ポインタ1741dはノード1750d自身を指しており、左リンク1740dにはノード1750eが接続されている。ノード1750eの保持するインデックスキーは“010010”、検査ビット位置は5である。ノード1750eの左ポインタ1740eはノード1750bを、右ポインタ1741eはノード1750eを指している。
 また、ノード1750fの保持するインデックスキーは“101011”であり、検査ビット位置1730fは2である。ノード1750fの左リンク1740fにはノード1750gが、右リンク1741fにはノード1750hが接続されている。
 ノード1750gの保持するインデックスキーは“100011”であり、検査ビット位置1730gは5である。ノード1750gの左ポインタ1740gはノード1750aを、右ポインタ1741gはノード1750gを指している。
 ノード1750hの保持するインデックスキーは“101100”であり、検査ビット位置1730hは3である。ノード1750hの左ポインタ1740hはノード1750fを、右ポインタ1741hはノード1750hを指している。
 図1の例では、ルートノード1750aからツリーを降りるにしたがって、各ノードの検査ビット位置が大きくなるように構成されている。
 ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図1において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
 上記のように、パトリシアツリーを用いた検索処理では、必要なビットの検査だけで検索できること、キー全体の比較は1回ですむことなどのメリットがあるが、各ノードからの2つのリンクが必ずあることにより記憶容量が増大することや、バックリンクの存在による判定処理の複雑化、バックリンクにより戻ることで初めてインデックスキーと比較することによる検索処理の遅延及び追加削除等データメンテナンスの困難性などの欠点がある。
 これらのパトリシアツリーの欠点を解消しようとするものとして、例えば下記特許文献1に開示された技術がある。下記特許文献1に記載されたパトリシアツリーにおいては、下位の左右のノードは連続した領域に記憶することによりポインタの記憶容量を削減するとともに、次のリンクがバックリンクであるか否かを示すビットを各ノードに設けることにより、バックリンクの判定処理を軽減している。
 しかしながら、下記特許文献1に開示されたものにおいても、1つのノードは必ずインデックスキーの領域とポインタの領域を占めること、下位の左右のノードを連続した領域に記憶するようにしてポインタを1つとしたため、例えば図1に示したパトリシアツリーの最下段の部分である左ポインタ1740c、右ポインタ1741h等の部分にもノードと同じ容量の記憶領域を割り当てる必要があるなど、記憶容量の削減効果はあまり大きいものではない。また、バックリンクによる検索処理の遅延の問題や追加削除等の処理が困難であることも改善されていない。
特開2001-357070号公報
 上述の従来の検索手法における問題点を解決するものとして、本出願人は、特願2006-187827において、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対からなるビット列検索に用いるツリーであって、ルートノードはツリーの始点を表すノードであって、該ツリーのノードが1つのときはリーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索を提案した。
 ところで近年において、情報処理技術の進展とともに情報サービスへの要求がさらに拡大し、より厳しいものになってきている。情報サービスを提供する上で基本となるのはデータベースの構築とそのデータベースからの情報の取出しであるが、データベースに蓄積されるデータ量はますます増大し、極めて巨大なものとなりつつある。
 本出願人の先に提案した検索手法は、上記巨大化しつつあるデータベースの高速検索を可能とするものであるが、データベースが巨大化するとともにそれに対応するカップルドノードツリーも、従来のツリー構造のものより記憶容量が少なくてすむとはいえ、大きなものとなる。一方、各種記憶手段の記憶容量にはそれぞれ制限があり、経済的なシステムを構築するためには各種アクセス速度、記憶容量の記憶手段を組み合わせて利用する必要がある。特に、キャッシュメモリを有効利用できることが望ましい。
 そこで本発明の解決しようとする課題は、カップルドノードツリーを複数の格納区域に分割して配置することを可能とするカップルドノードツリーの構造とそれを用いた検索手法を提供することである。
 本発明のカップルドノードツリーのブランチノードは、リンク先のノード対の格納された格納区域の識別子とその格納区域におけるリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含む。
 検索時には、カップルドノードツリーの任意のノードを検索開始ノードとしてブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて、該ブランチノードに含まれる格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとする。
 本発明のカップルドノードツリーに新たにインデックスキーを挿入する場合は、まずそのインデックスキーを検索キーとして、ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてブランチノードに含まれる格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを、ルートノードから順次リーフノードに至るまでリンク経路を記憶しながら繰り返し、該リーフノードに格納されたインデックスキーを検索結果キーとして取得する。
挿入するインデックスキーと検索の結果得られたインデックスキーの間でビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と、リンク経路上のブランチノードの弁別ビット位置との相対的位置関係により、挿入されるリーフノードともう一方のノードからなる挿入ノード対の挿入される格納区域の識別子と挿入ノード対の代表ノードの該格納区域における位置情報を含むブランチノードの位置情報を示す挿入位置を決定し、挿入ノード対を格納可能な空き領域を備えた空格納区域を探索し、空ノード対を取得し、空ノード対に空格納区域の上位の格納区域のノード対の内容を格納し、該上位の格納区域のノード対を解放して空ノード対を取得する操作を、該上位の格納区域が、挿入ノード対が挿入される格納区域となるまで繰り返し、検索キーと検索結果キーの大小関係に応じて、挿入されるリーフノードを挿入ノード対のどちらのノードとするかを決定し、挿入するインデックスキーをリーフノードに格納する。
本発明のカップルドノードツリーからあるインデックスキーを削除するときは、削除するキーにより検索を行い、削除対象のインデックスキーを保持するノードと同一ノード対を構成するノードの内容を当該ノード対のリンク元のブランチノードに書き込み、当該ノード対を削除することにより行う。
 本発明によれば、ブランチノードがリンク先のノード対の格納された格納区域の識別子を含むので、カップルドノードツリーを複数の格納区域に分割して配置することが可能になる。
従来の検索で用いられるパトリシアツリーの一例を示す図である。 配列に格納されたカップルドノードツリーの構成例を説明する図である。 カップルドノードツリーのツリー構造を概念的に示す図である。 本発明を実施するためのハードウェア構成例を説明する図である。 本発明の一実施形態における検索処理を説明するフローチャートである。 本発明の一実施形態における挿入処理を概念的に説明する図である。 本発明の一実施形態における挿入処理全体の処理フローの概要を説明する図である。 挿入キーを検索キーとして、ルートノードよりカップルドノードツリーを検索して検索結果キーを得る処理フローを説明する図である。 挿入ノード対の挿入位置を求める処理フローを説明する図である。 ノード対用の空配列要素を備えた空ブロックを探索し、空ノード対を取得する処理フローを説明する図である。 挿入ノード対の挿入位置に空ノード対を移動する処理フローを説明する図である。 空ノード対に挿入キー等を格納して挿入ノード対を完成させる処理フローを説明する図である。 本発明の一実施の形態におけるルートノードの挿入処理を含むノード挿入処理全体を説明する処理フロー図である。 本発明の一実施形態における削除処理の前段である検索処理の処理フローを説明する図である。 本発明の一実施形態における削除処理の後段の処理フローを説明する図である。 ノードの削除前のカップルドノードツリーと削除処理において検索処理を実行した探索経路スタックの状態を説明する図である。 削除処理を完了した後のカップルドノードツリー等の状態を説明する図である。 挿入処理の具体例1において、ノードの挿入前のカップルドノードツリーと探索経路ブロックの状態と配列を新たに取得した状態を説明する図である。 挿入処理の具体例1における挿入処理後のカップルドノードツリーを説明する図である。 挿入処理の具体例2において、ノードの挿入前のカップルドノードツリーと探索経路ブロックの状態と探索経路スタック上のブロック番号の指す配列に空ノード対を取得した状態を説明する図である。 挿入処理の具体例2において、空のノード対を移動して挿入ノード対を挿入位置に挿入可能とした状態を説明する図である。 挿入処理の具体例2において、挿入位置に挿入ノード対を挿入するとともに、挿入位置のブランチノードの弁別ビット位置を更新して挿入処理を完成させた状態を説明する図である。
 以下、本発明を実施するための最良の形態として、カップルドノードツリーを配列に格納する例について説明する。ブランチノードが保持するリンク先の代表ノードの位置を示すデータとして、記憶装置のアドレス情報とすることもできるが、ブランチノードあるいはリーフノードのうち占有する領域の記憶容量の大きい方を格納可能な配列要素からなる配列を用いることにより、ノードの位置を配列番号で表すことができ、代表ノードの位置を示す位置情報の情報量を削減することができる。
 図2Aは、本発明の一実施形態における配列に格納されたカップルドノードツリーの構成例を説明する図である。
 図2Aを参照すると、ブロック番号Aで識別される格納区域に配置された配列100の配列番号10の配列要素にノード101が記憶されている。ノード101はノード種別102、弁別ビット位置103、代表ノード番号104a及びブロック番号104bで構成されている。ノード種別102は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104aにはリンク先のノード対の代表ノードの配列番号20が格納され、ブロック番号104bにはAが格納されている。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。さらに、弁別ビット位置に格納された値を、単に弁別ビット位置ということもある。
 配列番号20の配列要素には、ノード対111の代表ノードであるノード[0]112が格納されている。そして隣接する次の配列要素(配列番号20+1)に代表ノードと対になるノード[1]113が格納されている。ノード[0]112はノード101と同様にブランチノードである。ノード[0]112のノード種別114には0が、弁別ビット位置115には3が、代表ノード番号116aには30が格納され、ブロック番号116bにはBが格納されている。またノード[1]113は、ノード種別117とインデックスキー118aで構成されている。ノード種別117には1が格納されており、ノード[1]113がリーフノードであることを示している。インデックスキー118には、“0001”が格納されている。以下では表記の簡略化のため、インデックスキーに格納されたデータのこともインデックスキーということがある。
配列100には、さらにノード対カウンタ119が格納されており、そこには配列100に格納されているノード対の個数である2が記憶されている。
 パトリシアツリーについて先に述べたと同様に、インデックスキーと対応するレコードにアクセスするためのアクセス先情報も当然必要である。インデックスキーとアクセス先情報との対応づけは、例えば、インデックスキーを記憶している記憶領域に隣接する記憶領域に、当該インデックスキーに対応するアクセス先情報を記憶することによって行ってもよい。以下ではアクセス先情報については省略して説明する。
 なお、代表ノードをノード[0]で表し、それと対になるノードをノード[1]で表すことがある。また、ある配列番号の配列要素に格納されたノードを、その配列番号のノードということがあり、ノードの格納された配列要素の配列番号を、ノードの配列番号ということもある。
 上述のノード[0]112のブロック番号116bの値Bで識別される配列120には、ノード対カウンタ129と、配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121が格納されている。
 ノード対カウンタ129には、配列120に格納されているノード対の個数である1が記憶されている。ノード122とノード123からなるノード対121の内容は省略されている。
 ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。検索キーの、前段のブランチノードの弁別ビット位置にあるビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。
 したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置にあるビット値を加えることにより、リンク先のノードが格納されたブロック番号で識別される配列の配列要素の配列番号を求めることができる。
 なお、上記の例では代表ノード番号をノード対の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。
 図2Bは、カップルドノードツリーのツリー構造を概念的に示す図である。図示の6ビットのインデックスキーは、図1に例示されたパトリシアツリーのものと同じである。
 符号210aで示すのがルートノードである。図示の例では、ルートノード210aはブロック番号Aの配列309aの配列番号220に配置されたノード対201aの代表ノードとしている。
 ツリー構造としては、ルートノード210aの下にノート対201bが、その下層にノード対201cとノード対201fが配置され、ノード対201fの下層にはノード対201hとノード対201gが配置されている。ノード対201cの下にはノード対201dが、さらにその下にはノード対201eが配置されている。
 図に示すように、ノード対201a、201b、201f及び201gはブロック番号Aの配列309aに格納され、ノード対カウンタ290aには4が記憶されている。ノード対201cとそれより下層のノード対201d、201eは、ブロック番号Bの配列309bに格納され、ノード対カウンタ290bには3が記憶されている。ノード対201hはブロック番号Cの配列309cに格納され、ノード対カウンタ290cには1が記憶されている。
 各ノードの前に付された0あるいは1の符号は、図1において説明した配列要素の前に付された符号と同じである。検索キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のリーフノードを見つけることになる。
 図2Bに示す例では、ルートノード210aのノード種別260aは0でブランチノードであることを示し、弁別ビット位置230aは0を示している。ブロック番号240aはAであり、リンク先のノード対201bがブロック番号Aの配列309aに配置されていることを示している。代表ノード番号は220aであり、それはノード対201bの代表ノード210bの格納された配列309aの配列要素の配列番号である。
 ノード対201bはノード210bと211bで構成され、それらのノード種別260b、261bはともに0であり、ブランチノードであることを示している。ノード210bの弁別ビット位置230bには1が格納され、ブロック番号240bには配列309bのブロック番号Bが格納されている。リンク先の代表ノード番号にはノード対201cの代表ノード210cの格納された配列309bの配列要素の配列番号220bが格納されている。
 ノード210cのノード種別260cには1が格納されているので、このノードはリーフノードであり、したがって、インデックスキーを含んでいる。インデックスキー250cには“000111”が格納されている。一方ノード211cのノード種別261cは0であり、ブランチノードであることを示している。弁別ビット位置231cは2、ブロック番号241cはBであり、代表ノード番号にはノード対201dの代表ノード210dの格納された配列309bの配列要素の配列番号221cが格納されている。
 ノード210dのノード種別260dは0であり、ブランチノードであることを示している。弁別ビット位置230dは5、ブロック番号240dはBであり、代表ノード番号にはノード対201eの代表ノード210eの格納された配列309bの配列要素の配列番号220dが格納されている。ノード210dと対になるノード211dのノード種別261dは1であり、インデックスキー251dには“011010”が格納されている。
 ノード対201eのノード210e、211eのノード種別260e、261eはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250e、251eにはインデックスキーとして“010010”と“010011”が格納されている。
 ノード対201bのもう一方のノードであるノード211bの弁別ビット位置231bには2が格納され、ブロック番号にはAが格納されている。リンク先の代表ノード番号にはノード対201fの代表ノード210fの格納された配列309aの配列要素の配列番号221bが格納されている。
 ノード対201fのノード210f、211fのノード種別260f、261fはともに0であり双方ともブランチノードである。それぞれの弁別ビット位置230f、231fには5、3が格納されている。また、ノード210fのブロック番号240fにはA、ブロック番号241fにはCが格納されている。ノード210fの代表ノード番号にはノード対201gの代表ノード210gの格納された配列309aの配列要素の配列番号220fが格納され、ノード211fの代表ノード番号にはノード対201hの代表ノードであるノード[0]210hの格納された配列309cの配列要素の配列番号221fが格納されている。
 ノード対201gのノード210g、211gのノード種別260g、261gはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250g、251gには“100010”と“100011”が格納されている。
 また同じくノード対201hの代表ノードであるノード[0]210hとそれと対をなすノード[1]211hのノード種別260h、261hはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250h、251hには“101011”と“101100“が格納されている。
 以下、上述のツリーからインデックスキー“100010”を検索する処理の流れを簡単に説明する。弁別ビット位置は、左から0、1、2、・・・とする。
 まず、ビット列“100010”を検索キーとしてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。また、ブロック番号240aはAであり、リンク先のノード対は配列309aに存在することが示されている。そこで代表ノード番号の格納された配列番号220aに1を加えた配列番号の配列309aの配列要素に格納されたノード211bにリンクする。
 ノード211bの弁別ビット位置231bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0である。ブロック番号240bはAであり、リンク先のノード対は配列309aに存在することが示されている。そこで代表ノード番号の格納された配列番号221bに0を加えた配列番号の配列309aの配列要素に格納されたノード210fにリンクする。
 ノード210fの弁別ビット位置230fには5が格納されているので、検索キー“100010”の弁別ビット位置が5のビット値をみると0である。ブロック番号240fはAであり、リンク先のノード対は配列309aに存在することが示されている。そこで代表ノード番号の格納された配列番号220fに0を加えた配列番号の配列309aの配列要素に格納されたノード210gにリンクする。
 ノード210gのノード種別260gは1でありリーフノードであることを示しているので、インデックスキー250gを読み出して検索キーと比較すると両方とも“100010”であって一致している。このようにしてカップルドノードツリーを用いた検索が行われる。
 図2Bに示すように、カップルドノードツリーのノード対は、いわばツリーの深さ方向を優先して分割して格納領域に配置されている。したがって、上述の検索キー“100010”によるルートノード210aを検索開始ノードとした検索は、配列309aに対するアクセスだけで実行することができる。
 次に、図2Bを参照してカップルドノードツリーの構成(論理的構成)の意味について説明する。
 カップルドノードツリーの構成はインデックスキーの集合により規定される。図2Bの例で、ルートノード210aの弁別ビット位置が0であるのは、図2Bに例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
 ノード211bの弁別ビット位置が2であるのは、ノード211h、210h、211g、210gに格納された0ビット目が1のインデックスキーの1ビット目がすべて0で等しく、2ビット目で初めて異なるものがあるという、インデックスキーの集合の性質を反映している。
 以下0ビット目の場合と同様に、2ビット目が1であるものはノード211f側に分類され、2ビット目が0であるものはノード210f側に分類される。
 そして2ビット目が1であるインデックスキーは3ビット目の異なるものがあるのでノード211fの弁別ビット位置には3が格納され、2ビット目が0であるインデックスキーでは3ビット目も4ビット目も等しく5ビット目で異なるのでノード210fの弁別ビット位置には5が格納される。
 ノード211fのリンク先においては、3ビット目が1のものと0のものがそれぞれ1つしかないことから、ノード210h、211hはリーフノードとなり、それぞれインデックスキー250hと251hに“101011”と“101100”が格納されている。
 仮にインデックスキーの集合に“101100”の代わりに“101101”か“101110”が含まれていたとしても、3ビット目までは“101100”と等しいので、ノード211hに格納されるインデックスキーが変わるだけで、ツリーの論理構造自体は変わることはない。しかし、“101100”に加えて“101101”が含まれていると、ノード211hはブランチノードとなり、その弁別ビット位置は5になる。追加されるインデックスキーが“101110”であれば、弁別ビット位置は4となる。それらの場合、ブランチノード211hのリンク先に例えば配列309cに格納されたノード対があり、リーフノード211hに格納されていたインデックスキー“101100”とインデックスキー“101101”あるいは“101110”の弁別ビット位置でのビット値に応じて、ビット値が0のインデックスキーはノード[0]に、ビット値が1のインデックスキーはノード[1]に格納される。ノード対カウンタ290cの値は2となる。
 以上説明したように、カップルドノードツリーの論理構造は、インデックスキーの集合に含まれる各インデックスキーの各ビット位置のビット値により決定される。
 そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hのインデックスキー251hの“101100”、ノード210hのインデックスキー250hの“101011”、・・・、ノード210cのインデックスキー250cの“000111”となり降順にソートされている。
 すなわち、カップルドノードツリーにおいては、インデックスキーはソートされてツリー上に配置されている。
 検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着き、インデックスキー251h“101100”が検索結果キーとして得られる。
 また、例えば“100100”で検索した場合でも、ノード210a、211b、210fのリンク経路では検索キーの3ビット目と4ビット目は使われることがなく、“100100”の5ビット目が0なので、“100010”で検索した場合と同様にノード210gに到達することになる。このように、カップルドノードツリーに格納されたインデックスキーのビット構成に応じた弁別ビット位置を用いて分岐が行われる。
 図3は、本発明を実施するためのハードウェア構成例を説明する図である。
 本発明の検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309aと検索中にたどるノードが格納された配列の配列要素の配列番号と配列のブロック番号を記憶する探索経路スタック310を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
 図3の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、配列309aは外部記憶装置306に、探索経路スタック310を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
 また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた主記憶装置305の一時記憶領域が用いられることは当然である。そして、以下の説明においては、一次記憶領域に格納されるあるいは設定される値を一時記憶領域の名前で呼ぶことがある。
 次に、本発明の一実施態様に係るカップルドノードツリーを用いた基本的な操作である検索処理について説明する
 図4は、一実施形態におけるビット列の検索処理を示すフローチャートである。
 まず、ステップS401aで、検索開始ノードを格納した配列のブロック番号と配列要素の配列番号を取得する。検索開始ノードの指定は、検索処理を利用する各種アプリケーションや、利用者によって行われる。
 取得された検索開始ノードのブロック番号と配列番号は、図示しない検索開始ノード設定エリアに設定されるが、この検索開始ノード設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域」の一つである。以下の説明では、「図示しない検索開始ノード設定エリアに設定する」のような表現に変えて、「検索開始ノードの配列番号を得る。」、「検索開始ノードとして設定する」あるいは単に「検索開始ノードに設定する」のように記述することもある。検索開始ノード以外についても同様である。
 次に、ステップS402bで、探索経路スタック310に取得されたブロック番号と配列番号を格納し、ステップS403aで、そのブロック番号と配列番号に対応する配列要素を参照すべきノードとして読み出す。そして、ステップS404で、読み出したノードから、ノード種別を取り出し、ステップS405で、ノード種別がブランチノードであるか否かを判定する。
 ステップS405の判定において、読み出したノードがブランチノードである場合は、ステップS406に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS407で、取り出した弁別ビット位置に対応するビット値を検索キーから取り出す。そして、ステップS408aで、ノードからブロック番号と代表ノード番号を取り出して、ステップS409で、検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS402bに戻る。
 以降、ステップS405の判定においてリーフノードと判定されてステップS410に進むまで、ステップS402からステップS409までの処理を繰り返す。ステップS410で、リーフノードからインデックスキーを取り出して、処理を終了する。
 次に、図5~図8によりカップルドノードツリーにおけるノード挿入処理を説明する。図5~図7Eが通常の挿入処理を説明するものであり、図8はルートノードの挿入処理を説明するものである。ルートノードの挿入処理と通常の挿入処理により、カップルドノードツリーが生成されることから、ノード挿入処理の説明はカップルドノードツリーの生成処理の説明でもある。
 図5は、本発明の一実施形態における挿入処理、特に空ノード対を挿入位置に取得する処理を概念的に説明する図である。図5に例示するカップルドノードツリーは、後に図12C~図12Eに示すカップルドノードツリーの部分木である。なお、図5においては、一部において引用符号の表記を省略しているが、図12Cにはすべて表記されている。
図5の(1)に示すものは、挿入キーにより検索を行い、挿入キーの挿入位置を求め、空の配列要素の存在する配列である空ブロックを探索した状態である。挿入キー3270の値は“01000”であり、ビット位置1のみが値“1”であり、他のビット位置の値は“0”である。カップルドノードツリーはルートノード3210b、とその下位に直列に連なるノード対3201c、ノード対3201d、3201eから構成されている。
 ルートノード3210bは、ブロック番号がAである配列3309aの配列番号3220aの配列要素に配置されている。その弁別ビット位置は2、ブロック番号はB、代表ノード番号は3220bである。配列3309aのノード対カウンタ3390aには“2”が格納されている。図の例では配列3309aには部分木のルートノード3210bしか示されていないが、先に述べたように、図示しない上位のノード対により、配列3309aの配列要素が使われているものとしている。
 ノード対3201cの代表ノードはブランチノードであり、ブロック番号がBである配列3309bの配列番号3220bの配列要素に配置されている。その弁別ビット位置は3、ブロック番号はB、代表ノード番号は3220cである。代表ノードと対をなすノードはリーフノードであり、インデックスキーには“00100”が格納されている。
ノード対3201dの代表ノードはブランチノードであり、ブロック番号がBである配列3309bの配列番号3220cの配列要素に配置されている。その弁別ビット位置は4、ブロック番号はC、代表ノード番号は3220dである。代表ノードと対をなすノードはリーフノードであり、インデックスキーには“00010”が格納されている。配列3309bのノード対カウンタ3390bには“1”が格納されている。
 ノード対3201eの代表ノードはリーフノードであり、ブロック番号がCである配列3309cの配列番号3220cの配列要素に配置されている。そのインデックスキーには“00000”が格納されている。また、代表ノードと対をなすノードはリーフノードであり、インデックスキーには“00001”が格納されている。配列3309cのノード対カウンタ3390cには“2”が格納されている。
上述のカップルノードツリーを、検索キーを挿入キー3270、検索開始ノードをルートノード3210bとして検索すると、太枠で示すリーフノードに格納されたインデックスキー“00000”が検索結果キーとして得られる。そして、検索結果キーと挿入キーの上位からのビット列比較により、最初に異なるビット値となる差分ビット位置を求めると、値1が得られる。差分ビット位置と各弁別ビット位置との相対的な大小関係から、挿入位置として、太枠で示すルートノード3210bが得られる。
 ここで、挿入位置がルートノード3210bであるとは、ブランチノードであるルートノードのブロック番号Bの配列の代表ノード番号3220bの指す配列要素に、挿入キーをインデックスキーとして含むリーフノードとそれと対をなすノードからなる挿入ノードの代表ノードが配置されるということである。つまり、挿入ノード対の実際に挿入される配列要素は、挿入位置のブランチノードのリンク先である。
 図に示す例では、各配列のノード対の最大格納数は2としている。そこで、ブロック番号Bの配列3309bのノード対カウンタ3390bの値は2で最大格納数を示していることから下位のノードの配置された空ブロックを探索し、ブロック番号Cの配列3309c(以下、ブロックCということがある。他の配列についても同様である。)から空ノード対3201fを取得した状態が、図5の(1)に示すものである。
 図5の(2)に示すものは、空のノード対を含むブロックCのノードにリンクするブロックBのノードを含むノード対をブロックCに移動してブロックBに空ノード対を確保し、挿入ノード対を挿入位置に挿入可能とした状態である。
 図5の(1)に示すブロックBのノード対3201dの内容がブロックCの空ノード対3201fに書き込まれ、ノード対3201dの配置されていた配列要素は空になっている。すなわち、挿入ノード対が挿入されるブロックBに空ノード対が確保されている。したがって、ノード対カウンタ3390bの値は1つ減って1になっている。また、ノード対カウンタ3390cの値は1つ増えて2になっている。
 図5の(3)に示すものは、挿入位置に挿入ノード対を挿入するとともに、挿入位置のブランチノードの弁別ビット位置を更新して挿入処理を完成させた状態である。
 挿入キー“01000”が検索結果キー“00000”より大きいことから、挿入キーをインデックスキーとして含むリーフノードはノード対3201dのノード[1]に配置され、挿入位置のブランチノードであるルートノード3210bの内容がノード対3201dのノード[0]に書き込まれている。そして、挿入位置のブランチノードであるルートノード3210bの弁別ビット位置は差分ビット位置の値1に更新されている。ノード対カウンタ3390bの値は2に更新されている。
 図6は、本発明の一実施形態における挿入処理全体の処理フローの概要を説明する図である。
 まず、ステップS600として示すように、挿入キーを検索キーとして、ルートノードよりカップルドノードツリーを検索して検索結果キーを得る。ステップS600の詳細フローは図7Aを参照して説明する。
 次にステップS610として示すように、挿入ノード対の挿入位置を求める。ステップS610の詳細フローは図7Bを参照して説明する。
 次にステップS630として示すように、ノード対用の空き領域を備えた空格納区域を探索し、空ノード対を取得する。ステップS630の詳細フローは図7Cを参照して説明する。
 上述のステップS600、ステップS610及びステップS630の処理により、図5の(1)に示す状態が得られる。
 次にステップS640として示すように、挿入ノード対の挿入位置に空ノード対を移動する。この処理は、図5の(2)に示す状態に対応する。ステップS640の詳細フローは図7Dを参照して説明する。
最後にステップS660として示すように、空ノード対に挿入キー等を格納して挿入ノード対を完成させる。この処理は、図5の(3)に示す状態に対応する。ステップS660の詳細フローは図7Eを参照して説明する。
 以下、図7A~図7Eを参照して、図6に示す概略フローチャートの各ステップの詳細フローチャートを説明する。この詳細フローチャートにおいては、カップルドノードツリーは配列に格納されているものとして説明する。
図7Aは、挿入キーを検索キーとして、ルートノードよりカップルドノードツリーを検索して検索結果キーを得る図6に示すステップS600の詳細な処理フローを説明する図である。挿入キーは検索キーとして設定されているものとする。
 ステップS701において、検索開始ノードに、ルートノードの配置された配列のブロック番号とその配列の配列要素の配列番号を設定する。図5に示す例では、検索開始ノードにブロック番号Aと配列番号3220aが設定される。
 次にステップS703において、図4に示す検索処理により、検索結果キーとしてのインデックスキーを得る。図5の例示では、インデックスキー“00000”が得られる。
 ステップS705において、挿入キー(検索キー)とインデックスキー(検索結果キー)が等しいか判定し、等しければ挿入失敗として処理を終了する。等しくなければ図7Bに示すステップS711に進む。
 図7Bは、挿入ノード対の挿入位置を求める図6に示すステップS610の詳細な処理フローを説明する図である。
 ステップS711で、挿入キーとステップS703で得たインデックスキーのビット列比較を例えば排他的論理和で行い、差分ビット列を得る。
 ステップS712に進み、ステップS711で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置を、差分ビット位置に設定する。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置(差分ビット位置)を得ることも可能である。図5に示す例では、差分ビット位置には1が設定される。
 次にステップS713で、リーフ位置ポインタに、探索経路スタックのスタックポインタの値を設定する。図5に示す例では、リーフ位置ポインタに設定される値は、探索経路スタックのブロック番号Cと配列番号3220dを指すスタックポインタの値である。探索経路スタックの一番下のスタックエリアを指すポインタ値を0とすると、リーフ位置ポインタに設定される値は3になる。
 次にステップS714に進み、探索経路スタックのスタックポインタがルートノードの配列番号を指しているか判定する。指していればステップS720に移行し、指していなければステップS715に進む。
 ステップS715において、探索経路スタックのスタックポインタを1つ戻してそこにスタックされているブロック番号と配列番号を取り出す。
 ステップS716に進み、ステップS715で取り出したブロック番号と配列番号の指す配列要素を配列からノードとして読み出す。
 ステップS717に進み、ステップS716で読み出したノードから、弁別ビット位置を取り出す。
 次にステップS718に進み、ステップS717で取り出した弁別ビット位置がステップS712で設定した差分ビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
 ステップS718の判定結果が否定であれば、ステップS714に戻り、ステップS718での判定が肯定になるかステップS714での判定が肯定になるまで繰り返す。ステップS718での判定が肯定になると、ステップS719で経路探索スタックのスタックポインタを1つ進め、ステップS720に移行する。
ステップS720では、探索経路スタックから、スタックポインタの指すブロック番号と配列番号を取り出し、挿入位置のブロック番号と配列番号に設定する。次にステップS721において、挿入位置ポインタに、探索経路スタックポインタの値を設定して、図7Cに示すステップS731に進む。図5に示す例示では、ルートノード3210bの弁別ビット位置の値が2であり、差分ビット位置より下位なので、ステップS714での判定が肯定になってステップS714からステップS718のループ処理から抜け出す。したがって、挿入位置のブロック番号と配列番号には、ブロック番号Aと配列番号3210bが設定される。また、挿入位置ポインタの値には、上述のポインタ値の表記(以下、この表記を断りなく用いることがある。)によれば、ルートノードの配列番号を指すポインタの値である0が設定される。
図7Cは、ノード対に用いる空配列要素を備えた空ブロックを探索し、空ノード対を取得する図6に示すステップS630の詳細な処理フローを説明する図である。
まずステップS731で、ブロック番号に、ステップS720で設定した挿入位置のブロック番号を設定する。図5の例示では、ここでブロック番号に設定されるのはブロック番号Aである。
次にステップS732で、ブロック番号の指す配列のノード対カウンタの値は上限値か判定する。上限値でなければステップS736に分岐し、上限値であればステップS733に進み、探索経路スタックのスタックポインタの値はリーフ位置ポインタの値と等しいか判定する。それらの値が等しくなければ、ステップS734に分岐し、探索経路スタックのスタックポインタを1つ進めて、スタックポインタの指すブロック番号を取り出し、ステップS732に戻る。
探索経路スタックのスタックポインタの値とリーフ位置ポインタの値が等しければ、ステップS735において、ブロック管理から、空状態の配列のブロック番号を取得し、ステップS736に進む。なお、本発明は、配列の空塞がりの管理を行うブロック管理の存在を前提としており、ブロック管理から、空状態の配列のブロック番号を取得するものとしている。また、配列に格納可能なノード対の上限も、ブロック管理から与えられ、ノード対カウンタの値により配列に空が存在するか判断するものとする。
ステップS736では、ノード対の移動先のブロック番号に、取得したブロック番号を設定し、図7Dに示すステップS741に進む。ここで設定される取得したブロック番号は、ステップS731で設定した挿入位置のブロック番号、ステップS734で取り出したブロック番号、あるいはステップS735で取得したブロック番号である。
図5の例示では、ブロック番号Aの配列3309aのノード対カウンタ3390a及びブロック番号Bの配列3309bのノード対カウンタ3390bの値は上限値であり、ブロック番号Cの配列3309cのノード対カウンタ3390cの値は上限値でないので、探索経路スタックからブロック番号Cが取り出されて、ノード対の移動先のブロック番号に設定される。このとき、探索経路スタックのポインタ値は、ブロック番号Cと代表ノード番号3220dを指す3である。
図7Dは、挿入ノード対の挿入位置に空ノード対を移動する図6に示すステップS640の詳細な処理フローを説明する図である。挿入ノード対の挿入位置に空ノード対を確保するために、空ノード対を取得したブロック番号の配列(移動先)に配置されたノードから、ステップS703で実行した検索処理のリンク経路を遡り、空ノード対を取得したブロック番号の配列とは異なるブロック番号の配列に配置された上位のノードを含むノード対(移動元)を移動先に移動し、移動元を空ノード対とすることを、挿入位置に空ノード対を確保するまで繰り返す。
 まず、ステップS741で、探索経路スタックのスタックポインタの値は挿入位置ポインタの値と等しいか判定する。等しければ図7Dに示すステップS761に分岐し、等しくなければステップS742に進む。ステップS742では、探索経路スタックのスタックポインタの指すブロック番号と配列番号を取り出し、スタックポインタを1つ戻す。
 次にステップS743で、取り出したブロック番号とステップS736で設定した移動先のブロック番号は一致するか判定する。一致すればステップS741に戻り、一致しなければステップS744に進む。図5に示す例示では、図7Dに示す処理の最初の処理のときには探索経路スタックのスタックポインタの値は3であり、移動先のブロック番号はCである。したがって、ステップS741~ステップS743の処理ループを一周してからステップS744に進む。このとき、ステップS742で取り出したブロック番号はBであり、探索経路スタックのスタックポインタの値は1になっている。
 ステップS744では、ノード対の移動元のブロック番号にステップS742で取り出したブロック番号を、ノード対の移動元の代表ノード番号にステップS742で取り出した配列番号から得た代表ノード番号を設定する。ここで配列番号から代表ノード番号を得ることは、ノード[0]とノード[1]の配列番号は1つ違いであり、その大小とどちらが偶数であるか決められていることにより可能であることは明らかである。
 図5の例示では、ノード対の移動元のブロック番号にはBが、代表ノード番号には3220cが設定される。
 次に、ステップS745で、ステップS736で設定したノード対の移動先のブロック番号の配列から空のノード対の代表ノードの配列番号を取得するとともに、ノード対カウンタを1つ加算し、ステップS746で、ノード対の移動先の代表ノード番号に、ステップS745で取得した空のノード対の代表ノードの配列番号を設定する。
 次に、ステップS747において、ステップS744で設定したノード対の移動元のブロック番号と代表ノード番号の指す配列要素の組の内容をノード対として読み出し、ステップS748で、該読み出したノード対の内容を、ステップS746で設定したノード対の移動先のブロック番号と代表ノード番号の指す配列要素の組に書き込む。
 図5の例示では、図5の(1)に示すように、ノード対の移動先のブロック番号がCである配列3309cから空のノード対3201fが取得され、その代表ノードの配列番号は、図5の(2)に示すように3220c’である。そして、ノード対カウンタ3390cは1つ加算され1から2になっており、ノード対の移動元のブロック番号Bと代表ノード番号3220cの指す配列要素の組(ノード対3201d)の内容がノード対の移動先のブロック番号Cと代表ノード番号3220c’の指す配列要素の組(ノード対3201f)に書き込まれている。ノード対3201fと代表ノード番号3220fに付された括弧書き(3201d)と(3220d)は、それぞれの値が図5の(1)で示すものの内容と等しいことを示している。
 次に、ステップS749において、探索経路スタックのスタックポインタの指すブロック番号と配列番号を取り出し、ステップS750で、該取り出したブロック番号と配列番号の指す配列要素の、ブロック番号にノード対の移動先のブロック番号を、代表ノード番号にノード対の移動先の代表ノード番号を書き込む。
 次に、ステップS751において、ノード対の移動元のブロック番号と代表ノード番号の指すノード対を解放するとともに、ノード対カウンタを1つ減算する。そして、ステップS752において、ノード対の移動先のブロック番号に、ノード対の移動元のブロック番号を設定してステップS741に戻る。
図5に示す例では、探索経路スタックのスタックポインタの値は1となっており、ブロック番号Bと配列番号3220bが取り出される。ブロック番号Bと配列番号3220bの指すノード3210cのブロック番号にノード対の移動先のブロック番号Cを、代表ノード番号にノード対の移動先の代表ノード番号3220c’を、書き込んだ状態が図5の(2)に示されている。また、ノード対の移動元のブロック番号Bと代表ノード番号3220cの指すノード対3201dを解放するとともに、ノード対カウンタ3390bを1つ減算して1としている。また、ノード対の移動先のブロック番号には、ノード対の移動元のブロック番号Bが設定される。
図5に示す例においては、ステップS741に最初に戻ったとき、探索経路スタックのスタックポインタの値は1であるので、ステップS742を経て探索経路スタックのスタックポインタの値を0としてからステップS743に至り、比較対象のブロック番号が共にBであるので、再度ステップS741に戻る。このときは、探索経路スタックのスタックポインタの値は0であって、挿入位置ポインタの値と等しいので、図7Eに示すステップS761に進む。
図7Eは、空ノード対に挿入キー等を格納して挿入ノード対を完成させる図6に示すステップS660の詳細な処理フローを説明する図である。
 まず、ステップS761において、空のノード対のブロック番号に、ノード対の移動先のブロック番号を設定し、次にステップS762に進み、空のノード対のブロック番号の配列から、空のノード対の代表ノードの配列番号を取得するとともに、ノード対カウンタを1つ加算する。
次にステップS763において、挿入キーとステップS703で得たインデックスキーの大小を比較し、挿入キーが大きいときは値1を小さいときは値0のブール値を得る。
 次にステップS764で、ステップS762で設定した代表ノード番号にステップS763で得たブール値を加えて、リーフノードの配列番号に設定する。また、ステップS765において、ステップS762で設定した代表ノードの配列番号にステップS763で得たブール値の論理否定値を加算した配列番号を対ノードの配列番号に設定する。ステップS764で設定した配列番号は、挿入キーをインデックスキーとして含むリーフノードが配置される配列要素の配列番号であり、ステップS765で設定した配列番号は、そのリーフノードとノード対を成すノードが配置される配列要素のものである。
 次にステップS766において、空ノード対のブロック番号とステップS764で設定したリーフノードの配列番号の指す配列要素の、ノード種別にリーフを、インデックスキーに挿入キーを書き込む。
 次にステップS767において、挿入位置のブロック番号と配列番号の指す配列要素からその内容を読み出し、ステップS768で、該読み出した内容を空ノード対のブロック番号とステップS765で設定した配列番号の指す配列要素に書き込む。
 最後にステップS769において、挿入位置のブロック番号と配列番号の指す配列要素の、ノード種別にブランチを、弁別ビット位置に差分ビットビット位置を、代表ノード番号に挿入するノード対の代表ノード番号を書き込み、処理を終了する。
図8は、本発明の一実施の形態におけるルートノードの挿入処理を含むインデックスキーを挿入する場合のノード挿入処理全体を説明する処理フロー図である。
 ステップS801において、取得することを求められたカップルドノードツリーのルートノードのブロック番号と配列番号が登録済みであるか判定される。登録済みであれば、図6~図7Eを用いて説明した通常の挿入処理が行われる。
 ステップ801での判定が登録済みでなければ、まったく新しいカップルドノードツリーの登録、生成が始まることになる。
 まず、ステップS802において、ブロック管理から、空状態の配列のブロック番号を取得する。次にステップS803において、該取得したブロック番号の指す配列から空きのノード対の代表ノードとなるべき配列要素の配列番号を取得するとともに、ノード対カウンタを1つ加算する。
次にステップS804において、ステップS803で得た配列番号に0を加えた配列番号を求める(実際には、ステップS803で取得した配列番号に等しい。)。さらにステップS805において、ブロック番号とステップS804で得た配列番号の指す配列要素の、ノード種別にリーフを、インデックスキーに挿入キーを書き込む。
最後にステップS806で、ステップS802とステップS804でそれぞれ取得したルートノードのブロック番号と配列番号を登録して処理を終了する。
 先にも述べたように、インデックスキーの集合があるとき、そこから順次インデックスキーを取り出し、図8及び図6~図7Eの処理を繰り返すことにより、インデックスキーの集合に対応した本発明のカップルドノードツリーを構築することができることは明らかである。
次に図9、図10を参照して、本発明の一実施の形態におけるカップルドノードツリーに係るインデックスキーの集合から、特定のインデックスキーを削除する処理フローを説明する。
 図9は、削除処理の前段である検索処理の処理フローを説明する図である。削除対象のインデックスキーは削除キーとして指定されているものとする。
まず、ステップS901で、検索開始ノードに、ルートノードの配置された配列のブロック番号とルートノードの配置された配列要素の配列番号を設定する。
次にステップS902において、図4に示す検索処理により、削除キーを検索キーとして検索開始ノードより配列を検索し、検索結果キーとしてのインデックスキーを得る。
 次にステップ903において、削除キーとインデックスキーを比較し、等しくなければ削除するインデックスキーはカップルドノードツリーに存在しないのであるから、削除は失敗となり、処理を終了する。等しければ次の処理、図10のステップS904以下の処理に進む。
 図10は、削除処理の後段の処理フローを説明する図である。
 まず、ステップS904で探索経路スタックに2つ以上の配列番号が格納されているか判定する。2つ以上の配列番号が格納されていないということは、言い換えれば1つだけで、その配列番号はルートノードの格納された配列要素のものである。その場合はステップS912に移行し、ステップS901で得たブロック番号の指す配列を解放する。次にステップS913に進み、ルートノードのブロック番号と配列番号の登録を抹消して処理を終了する。
 ステップS904において探索経路スタックに2つ以上の配列番号が格納されていると判定されたときはステップS905に進み、ステップS902において実行した図4に示す検索処理のステップS408aで得た代表ノード番号にステップS407で得たビット値を反転した値を加算した配列番号を得る。この処理は、削除対象のインデックスキーが格納されたリーフノードと対をなすノードの配置された配列番号を求めるものである。
 次にステップS906において、ステップS905で得た配列番号の配列要素の内容を読み出し、さらにステップS907において、探索経路スタックのスタックポインタを1つ戻してブロック番号と配列番号を取り出す。
 次にステップS908に進み、ステップS907で読み出した配列要素の内容をステップS907で得たブロック番号と配列番号の指す配列要素に書き込む。この処理は、削除対象のインデックスキーが格納されたリーフノードへのリンク元であるブランチノードを上記リーフノードと対をなすノードに置き換えるものである。
 次にステップS909において、上述の図4に示すステップS408aで得たブロック番号と代表ノード番号の指すノード対を削除するとともに、ノード対カウンタの値を1つ減算し、ステップS910に進む。
 ステップS910では、ノード対カウンタの値は0か判定し、0でなければ処理を終了し、0であれば、ステップS911において、上述の図4に示すステップS408aで得たブロック番号の指す配列を解放して処理を終了する。
 次に、具体例により、本発明の一実施形態に係る削除処理と挿入処理を説明する。
 図11Aは、ノードの削除前のカップルドノードツリーと削除処理において検索処理を実行した探索経路スタックの状態を説明する図である。
 図11Aに例示するカップルドノードツリーは、ノード対1201a、1201b、1201cで構成されている。ノード対1201aとノード対1201bはブロック番号Aの配列1309aに配置され、ノード対1201cはブロック番号Bの配列1309bに配置されている。したがって、配列1309aのノード対カウンタ1390aの値は2であり、配列1309bのノード対カウンタ1390bの値は1である。
 ノード対1201aの代表ノードであるルートノード1210aは配列1309aの配列番号1220の配列要素に配置されており、ノード種別1260aは0であってブランチノードである。弁別ビット位置1230aには0が保持され、ブロック番号1240aにはAが保持されている。また、代表ノード番号には、ノード対1201bの代表ノード1210bの配置された配列番号である1220aが保持されている。
 ノード対1201bの代表ノード1210bはノード種別1260bが0であってブランチノードであり、弁別ビット位置1230bには2が保持され、ブロック番号にはBが保持されている。また、代表ノード番号には、ノード対1201cの代表ノード1210cの配置された配列番号である1220bが保持されている。
 代表ノード1210bと対をなすノード1211bはノード種別1261bが1であってリーフノードであり、インデックスキー1251bには“10000”が格納されている。
 ノード対1201cの代表ノード1210cはノード種別1260cが1であってリーフノードであり、インデックスキー1250cには“00000”が格納されている。
代表ノード1210cと対をなすノード1211cはノード種別1261cが1であってリーフノードであり、インデックスキー1251cには“00100”が格納されている。
 削除キー1270には、“00100”が設定されている。この削除キーを検索キーとしてルートノード1210aより検索をした経路が、探索経路スタック310にスタックされている。探索経路スタック310には、配列番号とブロック番号の組が、(1220、A)、(1220a、A)、(1220b+1、B)とスタックされている。これに対応してリンク経路が、カップルドノードツリーの太枠で囲んだノードと太線の矢印で示されている。検索結果としてリーフノード1211cのインデックスキー“00100”が得られ、リーフノード1211cが削除対象の削除ノードとなることが図11Aに示されている。また、太線の矢印で示す探索経路スタック310のスタックポインタは、配列番号1220b+1とブロック番号Bを指している。
図11Bは、削除処理を完了した後のカップルドノードツリー等の状態を説明する図である。図11Aに示す削除ノード1211cと対をなすノード1210cの内容が、探索経路スタック310のスタックポインタを1つ戻したところにスタックされているブロック番号Aと配列番号1220aの指すノード1210bに書き込まれた状態が図11Bに示されている。ノード種別1260bの括弧書き(1260c)は、ノード種別1260bにはノード種別1260cの値が書き込まれたことを示している。インデックスキー1250bとその括弧書き(1250c)についても同様である。
 削除ノード1211cとそれと対をなし、その内容が直近上位のブランチノード1210bに書き込まれたノード1210cからなるノード対1201cは削除され、ノード対カウンタ1390bの値は1つ減って0となっている。したがって、ブロック番号Bの配列1309bは解放される。
 次に、図12A及び図12Bを参照して挿入処理の具体例1を説明する。具体例1は、探索経路スタック上のブロック番号の指す配列に空のノード対を確保する配列要素が存在しない場合のものである。
 図12Aは、ノードの挿入前のカップルドノードツリーと探索経路ブロックの状態とブロック番号Bの配列2309bを新たに取得した状態を説明する図である。
 図12Aに示すように、ノード対2201aとノード対2201bからなるカップルドノードツリーがブロック番号Aの配列2309aに配置されている。したがって、配列2309aのノード対カウンタ2390aの値は2である。
ノード対2201aの代表ノードであるルートノード2210aは、ブロック番号Aの配列2309aの配列番号2220の配列要素に配置されている。ルートノード2210aのノード種別は0であってブランチノードである。弁別ビット位置2230aには0が保持され、ブロック番号2240aにはAが保持されている。また、代表ノード番号には、ノード対2201bの代表ノード2210bの配置された配列番号である2220aが保持されている。
ノード対2201bの代表ノード2210bはノード種別2260bが1であってリーフノードであり、インデックスキー2250bには“00001”が格納されている。代表ノード2210bと対をなすノード2211bはノード種別2261bが1であってリーフノードであり、インデックスキー2251bには“10000”が格納されている。
 挿入キー2270には、“00000”が設定されている。この挿入キーを検索キーとしてルートノード2210aより検索をしたリンク経路が、カップルドノードツリーの太枠で囲んだノードと太線の矢印で示され、さらに検索結果としてリーフノード2210bのインデックスキー“00001”が得られることが示されている。
探索経路スタック310には、配列番号とブロック番号の組が、(2220、A)、(2220a、A)とスタックされている。挿入キーと検索結果キーの差分ビット位置は4であるから、検索処理後に1つ戻された探索経路スタックのスタックポインタは図7Bに示すステップS719の処理により1つ進められ、図12Aに太線の矢印で示すように、配列番号2220aとブロック番号Aを指している。
したがって、挿入位置のブロック番号はA、配列番号は2220aであるから、リーフノード2210bが挿入位置となることが図12Aに示されている。
 図12Aの例示では、ノード対カウンタ2390aが上限値となっていること、探索経路スタックのスタックポインタはリーフ位置ポインタであることから、ノード対カウンタ2309bの値が0の空のブロック番号Bの配列2309bを新たに取得する。さらに配列2309bから、代表ノード2210cとそれと対をなすノード2211cからなる空ノード対2201cを取得した状態が図12Aに示されている。
 図12Bは、挿入処理後のカップルドノードツリーを説明する図である。挿入キー“00000”と検索結果のインデックスキー“00001”の大小関係により、確保した空ノード対2201cのノード[0]を、挿入キー“00000”をインデックスキー2250cとして含むリーフノード2210cとし、ノード[1]を、検索結果キー“00001”
をインデックスキー2251cとして含むリーフノード2211cとしている。また、ノード対カウンタ2390cの値は1つ増えて1となっている。
 挿入位置のノード2210bはブランチノードとなり、ノード種別2260bは0に更新され、その弁別ビット位置には挿入キーと検索結果キーの差分ビット位置である4が格納され、ブロック番号2240bにはBが格納されている。また、代表ノード番号2220bは挿入されたノード対2201cの代表ノード2210cが配置された配列要素の配列番号が格納されている。
 次に図12C、図12D及び図12Eを参照して、挿入処理の具体例2を説明する。具体例2は、探索経路スタック上のブロック番号の指す配列に空のノード対を確保する配列要素が存在する場合のものである。図12C、図12D及び図12Eに例示するカップルドノードツリーは、図5にその部分木を示したものである。図5には記載されていないノード対3201aと挿入位置のノード3210bと対をなすノード3211bが示されている。その他のツリー構造は、図5に示すものと同じであるので、説明を省略する。
 図12Cは、図5の(1)に示すものに対応し、ノードの挿入前のカップルドノードツリーと探索経路ブロックの状態と探索経路スタック上のブロック番号の指す配列に空ノード対を取得した状態を説明する図である。
 ノード対3201aの代表ノードであるルートノード3210aは、ブロック番号Aの配列3309aの配列番号3220の配列要素に配置されている。ルートノード3210aのノード種別3260aは0であってブランチノードである。弁別ビット位置3230aには0が保持され、ブロック番号3240aにはAが保持されている。また、代表ノード番号には、ノード対3201bの代表ノード3210bの配置された配列番号である3220aが保持されている。
 代表ノード3210bと対をなすノード3211bのノード種別3261bはリーフノードであることを示す1であり、インデックスキー3251bには“10000”が格納されている。
図5に示すものと同じく、挿入キー3270には、“01000”が設定されている。この挿入キーを検索キーとしてルートノード3210aより検索をしたリンク経路が、カップルドノードツリーの太枠で囲んだノードと太線の矢印で示され、さらに検索結果としてリーフノード3210eのインデックスキー“00000”が得られることが示されていることも、ブランチノード3210b以降は図5の(1)に示すものと同じである。
探索経路スタック310には、配列番号とブロック番号の組が、(3220、A)、(3220a、B)、(3220b、B)、(3220c、B)、(3220d、C)とスタックされている。探索経路スタック310のスタックポインタは、図12Cに太線の矢印で示すように、最初に見つかった空ノード対の存在する配列3309cのブロック番号Cと配列番号3220dを指している。
 また、図5の(1)に示すものと同様に、ブロック番号Cの配列3309cに空ノード対3201fを取得した状態が示されている。
 図12Cの例示では、検索開始ノードはノード3210aであり、弁別ビット位置3230aが0、ブロック番号3240がA、代表ノード番号3220aがノード対3201bの代表ノードを指しており、挿入キーの0ビット目のビット値が0である。したがって、挿入処理の検索処理において、ルートノード3210aからノード3210bにリンクする。それ以降の処理は図5の(1)を参照して説明したものとほぼ同じである。図5の(1)に示すものでは、検索開始ノードがノード3210bであって、その弁別ビット位置が“2”で差分ビット位置の値“1”より下位であるから、図7Bに示すステップS720にはステップS714から直接分岐するものであるが、図12Cに示すものでは、検索開始ノードがノード3210aであって、その弁別ビット位置が“0”で差分ビット位置の値“1”より上位であるから、ステップS719を介してステップS720に進む。したがって、どちらの場合も、ノード3210bが挿入位置となり、同じになるので、説明を省略する。
 図12Dは、図5の(2)に示すものに対応する図であり、空のノード対を含むブロックCのノードにリンクするブロックBのノードを含むノード対をブロックCに移動してブロックBに空ノード対を確保し、挿入ノード対を挿入位置に挿入可能とした状態を示している。各ブロック番号の配列の状態については図5の(2)について説明したとおりである。
 探索経路スタック310のスタックポインタは、図12Cに示す最初に見つかった空ノード対の存在する配列3309cのブロック番号Cと配列番号3220dを指すものから、空ノード対に移動してブロック番号Bの配列3309bに空ノード対を確保するノード対3201dの直近上位のノード3210cのブロック番号Bと配列番号3220cを指すポインタ値から1つ戻した、ブロック番号Bと配列番号3220bを指すものとなっている。このポインタ値を1つ戻す操作は、図7Dに示すステップS742で実行される。
 図12Eは、図5の(3)に示すものに対応する図であり、挿入位置に挿入ノード対を挿入するとともに、挿入位置のブランチノードの弁別ビット位置を更新して挿入処理を完成させた状態を示している。各ブロック番号の配列の状態については図5の(3)について説明したとおりである。
 探索経路スタック310のスタックポインタは、図7Bに示すステップS721で設定された挿入位置ポインタと等しく、ブロック番号Aと配列番号3220aを指すものとなっている。
 以上本発明を実施するための最良の形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。例えばリーフノードが、インデックスキー自体を含むことに代えてインデックスキーを格納した記憶領域の位置を示す情報を含むようにすることが可能であることは、当業者に自明である。
 また、本発明のビット列検索方法を実行する装置が、カップルドノードツリーを格納する記憶手段と図4に例示した処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。そして、そのプログラムにより、ブランチノードとリーフノードの識別手段、ブランチノードの弁別ビット位置に応じてリンク先のノード対のどちらかにリンクする手段等がコンピュータ上に実現される。
 また、本発明のインデックスキー挿入方法あるいはインデックスキー削除方法を実行する装置が、図6あるいは図9及び図10に例示した処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことも明らかである。
 したがって、上記プログラム、及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体は、本発明の実施の形態に含まれる。さらに、本発明のカップルドノードツリーのデータ構造も、本発明の実施の形態に含まれる。

Claims (13)

  1.  ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、
     前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
     前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の格納区域の識別子と該ノード対の一方のノードである代表ノードの前記格納区域における位置を示す位置情報を含み、前記リーフノードは、検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索装置において、
     前記ツリーの任意のノードを検索開始ノードとして、前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて、該ブランチノードに含まれる前記格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするビット列検索装置。
  2.  前記格納区域は配列であって、前記カップルドノードツリーは複数個の配列に分割して記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、
     スタックを備え、前記検索開始ノードの格納された配列の識別子と該配列の配列要素の配列番号、及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列の識別子と該配列の配列要素の配列番号が、順次前記スタックに保持されていくことを特徴とする請求項1記載のビット列検索装置。
  3.  ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、
     前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
     前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の格納区域の識別子と該ノード対の一方のノードである代表ノードの前記格納区域における位置を示す位置情報を含み、前記リーフノードは、検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索方法において、
     前記ツリーの任意のノードを検索開始ノードとし、
     前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて、該ブランチノードに含まれる前記格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返し、
     前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとする、
    ことを特徴とするビット列検索方法。
  4.  前記格納区域は配列であって、前記カップルドノードツリーは複数個の配列に分割して記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、
     スタックを備え、前記検索開始ノードの格納された配列の識別子と該配列の配列要素の配列番号、及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列の識別子と該配列の配列要素の配列番号が、順次前記スタックに保持されていくことを特徴とする請求項3記載のビット列検索方法。
  5.  請求項3または4記載のビット列検索方法をコンピュータに実行させるためのプログラム。
  6.  ビット列検索に用いるツリー状のデータ構造であって、
     ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなり、
     前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
     前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の格納区域の識別子と該ノード対の一方のノードである代表ノードの前記格納区域における位置を示す位置情報を含み、
     前記リーフノードは、検索対象のビット列からなるインデックスキーを含み、
     前記ツリーの任意のノードを検索開始ノードとして、前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて、該ブランチノードに含まれる前記格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索の実行を可能とすることを特徴とするデータ構造。
  7.  ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の格納区域の識別子と該ノード対の一方のノードである代表ノードの前記格納区域における位置を示す位置情報を含み、前記リーフノードは、検索対象のビット列からなるインデックスキーを含むカップルドノードツリーに、挿入キーとして指定されたビット列からなるインデックスキーを含むリーフノードを挿入するインデックスキー挿入方法において、
     前記挿入キーを検索キーとして、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて該ブランチノードに含まれる前記格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを、前記ルートノードから順次前記リーフノードに至るまでリンク経路を記憶しながら繰り返し、前記リーフノードに格納されたインデックスキーを、前記検索キーによる検索結果である検索結果キーとして取得する検索ステップと、
    前記検索キーと前記検索結果キーの間でビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と、前記リンク経路上のブランチノードの弁別ビット位置との相対的位置関係により、挿入される前記リーフノードともう一方のノードからなる挿入ノード対の挿入される格納区域の識別子と挿入ノード対の代表ノードの該格納区域における位置情報を含むブランチノードの位置情報を示す挿入位置を決定する挿入位置決定ステップと、
    前記挿入ノード対を格納可能な空き領域を備えた空格納区域を探索し、空ノード対を取得する空格納区域探索ステップと、
    前記空ノード対に前記空格納区域の直近上位の格納区域のノード対の内容を格納し、該直近上位の格納区域のノード対を解放して空ノード対を取得する操作を、該直近上位の格納区域が、前記挿入ノード対が挿入される格納区域となるまで繰り返す空ノード対移動ステップと、
    前記検索キーと前記検索結果キーの大小関係に応じて、挿入される前記リーフノードを前記挿入ノード対のどちらのノードとするかを決定し、前記指定されたインデックスキーを前記リーフノードに格納するリーフノード挿入ステップと、
     を備えたことを特徴とするインデックスキー挿入方法。
  8.  前記格納区域は配列であって、前記カップルドノードツリーは複数個の配列に分割して記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、
     スタックを備え、前記ルートノードの格納された配列の識別子と該配列の配列要素の配列番号、及び前記ルートノードから前記リーフノードに至るリンク先のノードの格納された配列の識別子と該配列の配列要素の配列番号が、順次前記スタックに保持されていくことを特徴とする請求項7記載のインデックスキー挿入方法。
  9. ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の格納区域の識別子と該ノード対の一方のノードである代表ノードの前記格納区域における位置を示す位置情報を含み、前記リーフノードは、検索対象のビット列からなるインデックスキーを含むカップルドノードツリーから、削除キーとして指定されたビット列からなるインデックスキーを含むリーフノードを削除するインデックスキー削除方法において、
     前記削除キーを検索キーとして、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じて該ブランチノードに含まれる前記格納区域の識別子の示す格納区域に格納されたリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを、前記ルートノードから順次前記削除キーとして指定されたビット列からなるインデックスキーを含むリーフノードに至るまでリンク経路を記憶しながら繰り返し、
     前記リーフノードと対をなすもう一方のノードの内容を、当該ノード対のリンク元のブランチノードに書き込み、
     当該ノード対を削除する、
    ことを特徴とするインデックスキー削除方法。
  10.  前記格納区域は配列であって、前記カップルドノードツリーは複数個の配列に分割して記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、
     スタックを備え、前記ルートノードの格納された配列の識別子と該配列の配列要素の配列番号、及び前記ルートノードから前記リーフノードに至るリンク先のノードの格納された配列の識別子と該配列の配列要素の配列番号が、順次前記スタックに保持されていくことを特徴とする請求項9記載のインデックスキー削除方法。
  11.  請求項7または8記載のインデックスキー挿入方法をコンピュータに実行させるためのプログラム。
  12. 請求項9または10記載のインデックスキー削除方法をコンピュータに実行させるためのプログラム。
  13.  請求項5、請求項11又は請求項12いずれか1項記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
     
PCT/JP2008/003266 2008-01-22 2008-11-11 ビット列検索装置、検索方法及びプログラム WO2009093290A1 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2008011148 2008-01-22
JP2008-011148 2008-01-22
JP2008168003A JP2009199577A (ja) 2008-01-22 2008-06-26 ビット列検索装置、検索方法及びプログラム
JP2008-168003 2008-06-26

Publications (1)

Publication Number Publication Date
WO2009093290A1 true WO2009093290A1 (ja) 2009-07-30

Family

ID=40900811

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2008/003266 WO2009093290A1 (ja) 2008-01-22 2008-11-11 ビット列検索装置、検索方法及びプログラム

Country Status (2)

Country Link
JP (1) JP2009199577A (ja)
WO (1) WO2009093290A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164469A (zh) * 2011-12-16 2013-06-19 苏州威世博知识产权服务有限公司 专利树构建、插入及删除节点的方法、装置及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265821A (ja) * 1992-03-17 1993-10-15 Hitachi Ltd データベースのインデックス管理方式
JPH07210569A (ja) * 1994-01-19 1995-08-11 Oki Electric Ind Co Ltd 情報検索方法および情報検索装置
WO2008004335A1 (fr) * 2006-07-07 2008-01-10 S.Grants Co., Ltd. dispositif de recherche de séquence de bits, procédé de recherche et programme

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265821A (ja) * 1992-03-17 1993-10-15 Hitachi Ltd データベースのインデックス管理方式
JPH07210569A (ja) * 1994-01-19 1995-08-11 Oki Electric Ind Co Ltd 情報検索方法および情報検索装置
WO2008004335A1 (fr) * 2006-07-07 2008-01-10 S.Grants Co., Ltd. dispositif de recherche de séquence de bits, procédé de recherche et programme

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164469A (zh) * 2011-12-16 2013-06-19 苏州威世博知识产权服务有限公司 专利树构建、插入及删除节点的方法、装置及系统

Also Published As

Publication number Publication date
JP2009199577A (ja) 2009-09-03

Similar Documents

Publication Publication Date Title
JP4271214B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4514771B2 (ja) カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
JP4271227B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4502223B2 (ja) ビット列のマージソート装置、方法及びプログラム
JP4498409B2 (ja) データベースのインデックスキー更新方法及びプログラム
JP4527753B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4379894B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4402120B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4439013B2 (ja) ビット列検索方法及び検索プログラム
JP4514768B2 (ja) カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム
US8250089B2 (en) Bit string search apparatus, search method, and program
WO2009093290A1 (ja) ビット列検索装置、検索方法及びプログラム
US8166043B2 (en) Bit strings search apparatus, search method, and program
WO2009122651A1 (ja) ビット列検索装置、検索方法及びプログラム
JP4567754B2 (ja) ビット列検索装置、検索方法及びプログラム
JP2011018296A (ja) カップルドノードツリーのインデックスキー挿入/削除方法
JP4391464B2 (ja) 2分木構造の情報を記憶する装置及びヒープ構造の情報を記憶する装置
JP4417431B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4813575B2 (ja) ビット列検索装置
JP5220057B2 (ja) ビット列検索装置、検索方法及びプログラム

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: 08871421

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 08871421

Country of ref document: EP

Kind code of ref document: A1