Patent GB-1259068-A (GB)
IPC: G06F17/30
Filed: 1970-06-15
Abstract: 1,259,068. Information retrieval. INTERNATIONAL BUSINESS MACHINES CORP. 15 June, 1970 [30 June, 1969], No. 28779/70. Heading G4C. A compressed index is generated from a sorted sequence of uncompressed keys by comparing each uncompressed key, except the first, with its prior key in the sequence and taking the highestorder unequal byte only from each uncompressed key for insertion in the compressed index, and (claimed separately) is searched for a search argument by using a position indication, accompanying the single key byte in each compressed key and specifying its position in the corresponding uncompressed key, to select a byte from the search argument for comparison with the key byte, this being done for the successive compressed keys in turn. Generating compressed keys.-A sequence of uncompressed keys, sorted into ascending (or descending) order, with each key accompanied by a pointer to corresponding data, is preceded by a dummy key and placed in a buffer together with indications of maximum key and pointer lengths (numbers of bytes) to control byte-bybyte accessing. Each key is compared in turn, byte-by-byte in descending order, with the corresponding bytes of the preceding key, the highest order unequal byte being stored in the buffer as the key byte of the corresponding compressed key together with an indication of its position in the uncompressed key and the pointer, the lower order bytes of the uncompressed key then being skipped over. Searching compressed keys.-Assuming ascending order, for each compressed key in turn the position indication selects a byte of the search argument, this byte being compared with the key byte to indicate equal, greater than or less than. On equality, the pointer accompanying the key is saved in a location in the buffer, a first state trigger is set (to indicate the equality) and a second state trigger is reset (at the start of the search both are reset), unless the second state trigger is set and the position indication is not less than a saved position indication (see below). On the other hand, if the key byte is greater than the argument byte: then search ends (argument not in the index) if the position indication is one, but otherwise the position indication is saved and the second state trigger set to indicate this, unless this trigger is already set and the position indication is not less than the currently saved position indication. When a position indication is saved, it overwrites any previously saved position indication, and the same is true for saved pointers. If the key byte is less than the argument byte, then the two state triggers and the register holding saved position indication are reset, unless neither state trigger was set or the second state trigger was set but the position indication was not less than the saved position indication. The compressed index ends with a position indication of zero and when this is detected, the saved pointer is read out as the result. The search may end earlier in some cases if a "search argument equal" counter is provided, ending occurring if the position indication is less than or equal to this counter while the key byte is greater than the search argument byte. The counter is incremented whenever a pointer is saved provided the counter currently equals the position indication. Searching an index provided in descending order is similar but the roles of greater than and less than are interchanged,by a switch in the comparator output.