WO1998055929A1 - Creating a perfect hash using offset table - Google Patents
Creating a perfect hash using offset table Download PDFInfo
- Publication number
- WO1998055929A1 WO1998055929A1 PCT/US1998/011680 US9811680W WO9855929A1 WO 1998055929 A1 WO1998055929 A1 WO 1998055929A1 US 9811680 W US9811680 W US 9811680W WO 9855929 A1 WO9855929 A1 WO 9855929A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- page
- values
- range
- subset
- value
- Prior art date
- Legal status (The legal status 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 status listed.)
- Ceased
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
Definitions
- the invention relates generally to computer system storage, and more particularly to an improved method and system for storing data associated with a table.
- a large table of entries may contain a relatively smaller subset of non-contiguous entries that is supported by a particular application.
- Unicode is a world-wide character encoding standard based on a 16-bit unit of encoding. With Unicode-configured products supporting only the code points used in a specific language, a smaller, non-contiguous subset of that language's code points are used.
- JIS Japanese Industrial Standard
- a hash table may be used to store the attributes, indexed by a hash value computed from the code point.
- One type of hash table is a hash table with collision resolution. This type of hash table must store information to handle collisions, usually accomplished by storing the key with each entry. Extra time is required to test for collisions, and even more time is required to resolve a collision when a collision is detected. Lastly, this type of hash table typically frequently winds up with a number of extra, unused entries, i.e., the table is not always densely packed. Lastly, perfect hash algorithms (with no collisions) provide desirable performance in many applications, as they can provide a good tradeoff between memory usage and speed.
- Yet another object is to provide the method and mechanism as characterized above that densely packs together the hashed values.
- Another object is to provide a method and mechanism of the above kind that provides for a very fast computation of the hash value.
- a related object is to provide the method and mechanism that operate in an automated manner.
- Yet another object is to provide the above method and mechanism that is fast, reliable, cost-efficient, flexible and extensible to various applications.
- the present invention provides a method and mechanism for converting a non-contiguous subset of values in a large range into a contiguous or mostly contiguous smaller range with a perfect hash.
- a subset of values is selected from among the values in the range, and the range is organized into a two-dimensional matrix.
- One dimension of the matrix represents pages, and the other dimension represents offsets into the pages.
- the matrix includes mapping information such as a bit indicative of whether the value represented by that intersection is a selected value in the subset, e.g., the bit equals one if selected in the subset or zero if not.
- the matrix is then converted into a one-dimensional array (e.g., bitmap) by selecting each page, testing the mapping information (e.g., one-bits) on each page for conflicts with mapping information in the one-dimensional array, and shifting each page an amount until no conflicts are detected.
- the page mapping information is overlaid onto the one- dimensional array at the shifted position, and the shift amount is recorded in a page offset table.
- the value is separated into a page number and its offset into the page. The value is thereby hashed into the value of the subset range by looking up the shift amount for the page and adding the shift amount to the offset into the page.
- FIGURE 1 is a block diagram representing a computer system for creating a perfect hash in accordance with present invention
- FIG. 2 is a block diagram representing an exemplary table of possible entries
- FIGS. 3 - 4 are block diagrams representing alternative ways of viewing selected entries of the table of FIG. 2;
- FIGS. 5 - 6 are block diagrams representing bitmap matrixes for storing information about the selected entries
- FIGS. 7 - 10 comprise block diagrams sequentially illustrating the overlaying of pages from a bitmap matrix into a one-dimensional resultant bitmap in accordance with one aspect of the invention
- FIGS. 11 - 14 represent offset values in a page offset table as the pages of the bitmap matrix are overlaid one another in accordance with one aspect of the invention
- FIGS. 15 - 18 are representations of a hash table being filled in with entry information
- FIG. 19 is a flow diagram generally representing the steps for creating the perfect hash in accordance with the present invention
- FIG. 20 is a flow diagram generally representing the steps for overlaying pages of the bitmap matrix to create the perfect hash in accordance with the present invention
- FIG. 21 is a block diagram representing a computer system for computing a hash value from a key in accordance with another aspect of the present invention.
- FIG. 22 is a flow diagram generally representing the steps for computing the hash value from a key.
- FIG. 1 there is shown a computer system generally designated 20 for re-mapping non-contiguous values using an offset table in accordance with the present invention.
- the computer system 20 is shown a computer system generally designated 20 for re-mapping non-contiguous values using an offset table in accordance with the present invention.
- RAM random access memory
- non-volatile storage such as a hard disk-drive, optical drive or the like.
- the non-volatile storage 28 can be used in conjunction with the RAM to provide a relatively large amount of virtual memory via well-known swapping techniques.
- ROM read-only-memory
- embedded systems can benefit from the present invention .
- the computer system 20 also includes at least one input device 30, typically a keyboard and/or a user pointing device such as a mouse, connected through input- output circuitry (I/O) 32 for communicating user commands to the processor 22.
- I/O input- output circuitry
- at least one local output device 34 such as a computer display monitor and speakers are connected to the I/O 32 for communicating information, such as via a graphical user interface, from the processor 22 to the user of the system 20.
- a re-map process 36 converts the subset into a contiguous, or mostly contiguous, zero-based range.
- the large range of values may correspond to indexes ranging from OOOOh (hexadecimal) to Offffh, for indexing a large table 38 of character attributes, e.g., the indexes are Unicode code points.
- OOOOh hexadecimal
- Offffh Offffh
- the re-map process 36 essentially takes the entries which are of interest and re-packs them into a mostly dense hash table 40, in a manner that allows the original table key to be received and converted to a hash value index to the mostly-dense hash table 40.
- a table of offsets 42 is generated which, as described below, is used in conjunction with the original index value to compute the hash value of the mostly-dense hash table 40.
- a first aspect involves the conversion of the subset of non-contiguous values, such as the keys of the large table 38, into the offset table 42.
- a second aspect of the invention involves the subsequent use of the offset table 42 by an operating system, driver, application program or the like, to hash a key of the large table 38 into a hash value, e.g., a hash value index to the mostly-dense hash table 40.
- the mostly-dense hash table 40 may be loaded into virtually any type of computer- based device, to provide a table of Unicode character attributes or the like.
- the hash value to the hash table 40 is computed and the attributes found therefrom.
- FIG. 2 provides a table 38 of sixteen entries, of which only certain entries are to be remapped into a mostly dense hash table 40. More particularly, the entries indexed by 0000b, 0001b, 0010b, 0110b, 1000b and 1111b are of interest to an application program. For example, as conceptually represented in FIG.
- steps 800 - 804 the indexes of the larger table 38 are selected and laid out in a bitmap matrix of rows (pages) and columns.
- FIG. 5 shows a four row-by-four column matrix 44 for the sixteen entry table.
- Those indexes of the entries which are of interest, corresponding to the entries in FIG. 3 have a corresponding bit in the bitmap set equal to one, indicated by an "X" in the bitmap matrix 44 of FIG. 5 (for purposes of visibility and to avoid confusion with the ones and zeroes of the indexes), while all other bits are zero (or blank) .
- an initial matrix may, for example, consist of 256 rows (8 bits) and 256 columns (8 bits) .
- row zero is set with bits equal to one for any desired Unicode characters between OOOOh to OOFFh, row one for desired characters in the range 0100 to Olffh, and so on.
- each row may be considered a page, numbered from 00b to lib, whereby the column number is an offset into the page from 00b to lib.
- the columns may be used as pages, with the row numbers representing the offset into the page.
- the original four-by-four matrix 44 of FIG. 5 is conceptually restructured into a new matrix 45, such that the columns of FIG. 5 become the pages, (shown horizontally in FIG. 6), and the rows become the offsets into the page (shown vertically in FIG. 6) .
- the pages are overlaid atop one another, one at a time, into a dense or mostly dense resultant one- dimensional bitmap 46. Since the selected indexes (as represented by the one-bits in the bitmap) are noncontiguous and are typically widely scattered, the bits on the several pages tend to interlace with no conflicts, or at least very few conflicts. Whenever a bit representing an index does conflict with another bit, the current page being overlaid onto the resultant bitmap 46 is shifted one character to the right. When the page interlaces perfectly with no conflicts, the shift amount is recorded as an offset for that page in the page offset table 42.
- a less expensive way to obtain a reasonable order for overlaying the pages is to rank the pages such that pages having more one-bits thereon are overlaid into the resultant bitmap 46 before those having less one-bits (i.e., a most to least ranking) .
- a ranking process is called at step 806 to count the one-bits on the various pages and rank the pages according to the count.
- Such a one-bit weighted ranking process has been found to provide an extremely dense packing. Indeed, when other optimizations (described below) are combined with this ranking process, packings of one-hundred percent (or very nearly one-hundred percent) are achieved in a rapid manner.
- the first page which starts the hash table is preferably selected to be the first page in the bitmap matrix 45, regardless of the number of characters thereon.
- selecting zero as a desired index and starting with this page as zero ensures that a zero index in the larger table 38 always maps to zero, which is useful when dealing with null terminated strings and the like.
- FIG. 7 shows the overlay process, corresponding to the flow diagram of FIG. 20, starting with the first page of FIG. 6 at step 900, pageoo, since pageoo includes the zero index. As shown in FIG.
- step 900 directly continues to step 908 since there can be no conflicts at this time and, assuming zero is selected, there are no leading zeroes on the first page.
- step 900 directly continues to step 908 since there can be no conflicts at this time and, assuming zero is selected, there are no leading zeroes on the first page.
- any table data corresponding to each one-bit on the pageoo will be written to the hash table 40 (such as at a step 814) .
- the "A" attribute data will be written to the position indexed by a zero
- the "I" attribute data to the position indexed by a two, as shown in FIG. 15.
- Step 914 tests for another page, and since one is available, returns to step 900 where the next page, pageio, is selected.
- FIG. 8 represents the overlaying of the next page, pageio, onto the previous resultant bitmap 46 a , which produces a new resultant bitmap 46 b .
- pageio is the next to be overlaid because the ranking process of step 806 determined that this row had the most bits set to one thereon (two) compared to the remaining rows.
- step 902 the pageio is first shifted left an amount equal to any leading zero bits. In this position, a test for conflicts is performed at step 904.
- One such test for conflicts is accomplished by AND-ing the bits of the current page (pageio) to the previous resultant bitmap 46 a , and testing for a zero result. If zero, then there are no conflicts. If nonzero, a conflict is detected, whereby at step 906 the page is shifted right one bit and the conflict test repeated. The shifting continues as necessary until no conflicts are detected.
- the conflict detection and resolution processes of steps 904 - 906 shifts pageio three positions to the right of zero, (as best represented in FIG. 8), before the page is combined with the previous bitmap 46 a .
- the offset of three for this page is recorded in the page offset table 42, as best shown in FIG. 12.
- the array data e.g., the "C" and "G" attributes, will be added to hash table 40 at the appropriate locations, as shown in FIG. 16.
- the resultant bitmap 4 ⁇ b is now five bits in length, and the hash table 40 will have to have space allocated for at least five entries.
- the resultant bitmap 46 grow as necessary to accommodate the shifted bits, as will the hash table 40, however trailing zero bits (blanks) are not considered part of the resultant bitmap 46 since only ones represent (indexes to) entries of interest. Note that the amount that the resultant bitmap 46 grows, which determines the ultimate size of the hash table 40, is dependent on how dense the packing is for the subset of values .
- step 914 The next page (steps 914 and 900) to be overlaid onto the resultant bitmap 46 is the pagen.
- pagen and pageoi each have one bit set therein, but for purposes of this example it is assumed that the ranking process of step 806 has ranked pagen for placement before pageoi.
- pagen has three leading zero bits (blanks) .
- step 902 the pagen is first shifted left three times before testing for conflicts.
- step 904 determines that a conflict exists at this (negative three) offset, and thus at step 906 the page is shifted right one place (the offset is incremented) and the conflict test repeated.
- step 904 determines that there are no conflicts, and thus at step 908, the pagen, with an offset of negative two, is combined with the previous resultant bitmap 46b into a new resultant bitmap 46 c (FIG. 9) .
- the offset of negative two for this page is recorded in the appropriate location (at location three) in the page offset table 42, as best shown in FIG. 13. Note that later, such as at step 814, the data corresponding to this index, e.g., the attributes of "P,” will be saved in the hash table 40 in the position corresponding to the index location in the resultant bitmap 46 c as shown in FIG. 17.
- the last remaining page to be overlaid onto the resultant bitmap 46 is the pageoi.
- pageoi has no leading zero bits (blanks). Accordingly, the pageoi is not shifted left by step 902 before testing for conflicts.
- step 904 a conflict exists at the zero offset, and thus the page is shifted right one place at step 906, the offset is incremented and the conflict test of step 904 repeated.
- conflicts continue to be detected at step 904 and the page shifted by step 906 until the pageoi is offset by positive five positions.
- the pageoi with an offset of plus five, is combined with the previous resultant bitmap 46 C into a new, and final resultant bitmap 46 (FIG. 10) .
- the pageoi was shifted the entire size of the previous resultant bitmap. More particularly, since the previous bitmap 46 c had one- hundred percent packing, pageoi was overlaid beginning at the end of the previous resultant bitmap. Note that it is feasible to test for one-hundred percent packing, and, if detected, immediately overlay the next page at the end rather than start at the beginning and repeatedly shift to the end.
- the offset of five for this page is recorded in the page offset table 42, as best shown in FIG. 14. The process now returns to FIG. 19.
- the attribute data corresponding to this index e.g., the attributes of "B” will be saved in the hash table 40 in the position corresponding to the index location in the resultant bitmap 46, as shown in FIG. 18.
- the six scattered indexes and corresponding data of the initial sixteen-entry table 38 can be remapped into a densely-packed hash table 40 indexed by values ranging from zero to five, along with the page offset table 42 of four entries (e.g., bytes). Note that even with such a small example, the memory savings may be significant. For example, if the initial sixteen-entry table 38 allocated one (1) kilobyte per index, the table required sixteen (16) kilobytes of memory. However, the same data may be stored in a six (6) kilobyte hash table, plus four storage units (e.g., words or bytes) for the page offset table.
- the page offset table 42 is needed to convert an key to the initial large table 38 into a hash value index of the dense hash table 40.
- Larger subsets of even larger arrays provide similar savings, and particularly benefit from the automated remapping process.
- various bitmap matrixes may be tried, including those which do not have the same number of rows and columns. For example, with sixteen bit indexes, splits other than 8 bits by 8 bits may be used to re-map the values in the above-described manner.
- the size of the resultant hash table 40 and the page offset table 42 are preserved as statistics associated with the hash table 40.
- step 802 the process loops back to step 802 to construct other matrixes, each time varying the way in which the values are split into rows and columns.
- 16-bit indexes can be divided into 128 pages of 512 columns (7 by 9 bits), 512 pages of 128 columns (9 by 7 bits), 64 pages of 1024 columns (6 by 10 bits) and so on. If a particular loop iteration improves on the formerly best split, the page offset table and accompanying statistics are substituted for the former ones, whereby the split that uses the least amount of space will ultimately remain after all (reasonable) splits have been tried (step 812) . Note that the above- described mapping operation is sufficiently fast such that all sensible combinations may be tried until the optimal mapping available via this method is recognized.
- the offset table 42 therefor may be used to write the original table entries into a dense or mostly-dense hash table 40 at step 814.
- FIG. 21 another computer system is shown in FIG. 21.
- like components to those in FIG. 1 have been renumbered one- thousand numbers higher than their counterparts in FIG. 1.
- the storage 1024 includes the completed hash table 1040 and the page offset table 1042, such as for the purpose of displaying selected characters such as Unicode characters.
- a second aspect of the invention deals with the conversion of a key of the original, large table 38, to a hash value 1044, which serves as an index to the dense hash table 1040.
- the tables 1040 and 1042 are typically stored in non-volatile memory, such as burned into a ROM or the like.
- an application program 1048 or the like first loads (or if already loaded, locates) the page offset table 1042 and hash table 1040 into the storage 1024 (at step 1100 of FIG. 22) .
- An key 1046 (input value) is received by the application program 1048 or the like and is provided to a hash computation process 1050, whereby at step 1104 (FIG. 22) the value is first split into the same bit groupings that were used to construct the page offset table 1042.
- the bit split is apparent from the size of the page offset table 1042, i.e., the number of page offset table 1042 entries equals the number of pages and thus indicates the number of bits used to store the page' s offset information, e.g., 128 entries corresponds to seven bits.
- the split and other information e.g., a filename of the corresponding hash table
- the high portion of the value is masked off by the computation process 1048 as part of step 1104, leaving the appropriate number of valid low bits representing the page number.
- the high portion equals two bits of the four possible bits, and thus the upper two bits are masked off.
- the remaining two bits are used as a zero- based index into the offset table 1042. For example, if a 0110b is received, such as for the purpose of displaying the "G" character, the upper bits are masked off leaving a 10b.
- the upper bits which represent the offset into the page, are obtained by shifting the non-masked upper bits the same number of bits in the page number to the right.
- the page number is used as in index into the page offset table 1042, whereby a look-up operation is performed to determine the offset value for the corresponding page.
- a 10b provides an offset value of three.
- this value is added to the offset into the page (equal to 01b as determined from the masking and shifting of the upper bits at step 1104) .
- the result (three plus one equals four) is the computed hash value index to the hash table 1040, and is returned to the application program 1048 at step 1110, which then obtains the appropriate data from the hash table 1040.
- the four (100b) entry in the hash table 40 of FIG. 18 properly indexes the "G" character.
- the table below sets forth the results of all valid computations, which are otherwise not described in detail herein:
- the computation is extremely fast, consisting only of an AND, (for masking), a shift, indexing an array (the page offset table 1042) and an add.
- the hash computation requires a valid input value, i.e., one that is supported by the application employing the hash table.
- a validity check (such as represented by step 1102) may be performed on the value to ensure that it corresponds to a valid input before performing the hash computation. If the input value is valid, the hash is perfect, as any valid key provides a unique result without collisions.
- the offset table need be maintained to compute the hash value. Accordingly, any other information accumulated during the construction of the offset table such as the resultant bitmaps and the statistics may be discarded. Of course, some metadata and/or other information may be maintained with the offset table and/or hash table if desired, e.g., so that an application can load the proper hash table and corresponding offset table if more than one are available in a system.
- a method and mechanism for creating a perfect hash on a given subset of noncontiguous values of a larger range densely packs together the hashed values while providing for a very fast computation of the hash value.
- the method and mechanism operate in an automated manner and functions particularly well with subsets of noncontiguous Unicode points.
- the method and mechanism are fast, reliable, cost-efficient, flexible and extensible.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| AU78211/98A AU7821198A (en) | 1997-06-05 | 1998-06-04 | Creating a perfect hash using offset table |
| JP50295599A JP4965009B2 (ja) | 1997-06-05 | 1998-06-04 | オフセット表を使用する完全ハッシュの生成 |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/869,913 US6014733A (en) | 1997-06-05 | 1997-06-05 | Method and system for creating a perfect hash using an offset table |
| US08/869,913 | 1997-06-05 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| WO1998055929A1 true WO1998055929A1 (en) | 1998-12-10 |
Family
ID=25354449
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/US1998/011680 Ceased WO1998055929A1 (en) | 1997-06-05 | 1998-06-04 | Creating a perfect hash using offset table |
Country Status (5)
| Country | Link |
|---|---|
| US (1) | US6014733A (enExample) |
| JP (3) | JP4965009B2 (enExample) |
| CN (1) | CN1206604C (enExample) |
| AU (1) | AU7821198A (enExample) |
| WO (1) | WO1998055929A1 (enExample) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6591250B1 (en) * | 1998-02-23 | 2003-07-08 | Genetic Anomalies, Inc. | System and method for managing virtual property |
| US20220121962A1 (en) * | 2021-01-11 | 2022-04-21 | Qingdao University | BlockNet security organization storage mapping method for spatial data |
Families Citing this family (36)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6014733A (en) * | 1997-06-05 | 2000-01-11 | Microsoft Corporation | Method and system for creating a perfect hash using an offset table |
| US6185552B1 (en) * | 1998-03-19 | 2001-02-06 | 3Com Corporation | Method and apparatus using a binary search engine for searching and maintaining a distributed data structure |
| EP0953919B1 (en) * | 1998-05-01 | 2003-02-19 | Hewlett-Packard Company, A Delaware Corporation | Hashing method and apparatus |
| US6321192B1 (en) * | 1998-10-22 | 2001-11-20 | International Business Machines Corporation | Adaptive learning method and system that matches keywords using a parsed keyword data structure having a hash index based on an unicode value |
| US6785278B1 (en) * | 1998-12-10 | 2004-08-31 | International Business Machines Corporation | Methods, systems and computer program products for hashing address values |
| US6321232B1 (en) * | 1998-12-18 | 2001-11-20 | Xerox Corporation | Method for creating a geometric hash tree in a document processing system |
| US6401185B1 (en) * | 1999-05-27 | 2002-06-04 | Oracle Corp. | Method and apparatus for accessing paged objects using a fast division technique |
| US7080382B2 (en) * | 2000-02-25 | 2006-07-18 | Oracle International Corporation | Accessing shorter-duration instances of activatable objects based on object references stored in longer-duration memory |
| US6928162B1 (en) * | 2000-04-07 | 2005-08-09 | International Business Machines Corporation | Method and system for manipulating and telescoping a hash function |
| US7185005B1 (en) | 2000-05-12 | 2007-02-27 | Oracle International Corporation | Nested transactions in a file system |
| US7389493B1 (en) * | 2000-05-12 | 2008-06-17 | Oracle International Corporation | Categories on a per instance basis |
| US7725878B1 (en) | 2000-05-12 | 2010-05-25 | Oracle International Corporation | Property bundles on a per instance basis |
| US7987217B2 (en) * | 2000-05-12 | 2011-07-26 | Oracle International Corporation | Transaction-aware caching for document metadata |
| US6741990B2 (en) * | 2001-05-23 | 2004-05-25 | Intel Corporation | System and method for efficient and adaptive web accesses filtering |
| US6801993B2 (en) | 2001-09-28 | 2004-10-05 | International Business Machines Corporation | Table offset for shortening translation tables from their beginnings |
| US6748401B2 (en) | 2001-10-11 | 2004-06-08 | International Business Machines Corporation | Method and system for dynamically managing hash pool data structures |
| US20050246330A1 (en) * | 2004-03-05 | 2005-11-03 | Giang Phan H | System and method for blocking key selection |
| US7831908B2 (en) * | 2005-05-20 | 2010-11-09 | Alexander Vincent Danilo | Method and apparatus for layout of text and image documents |
| US20060294126A1 (en) * | 2005-06-23 | 2006-12-28 | Afshin Ganjoo | Method and system for homogeneous hashing |
| TWM288401U (en) * | 2005-07-15 | 2006-03-01 | Genesys Logic Inc | Highly efficient data characteristics recognition device for flash memory |
| TW200705179A (en) * | 2005-07-29 | 2007-02-01 | Genesys Logic Inc | Efficient data property identification method for a flash memory |
| US7382876B2 (en) * | 2005-11-01 | 2008-06-03 | Microsoft Corporation | Hash function constructions from expander graphs |
| US7619623B2 (en) * | 2006-04-17 | 2009-11-17 | Microsoft Corporation | Perfect multidimensional spatial hashing |
| US7965297B2 (en) * | 2006-04-17 | 2011-06-21 | Microsoft Corporation | Perfect hashing of variably-sized data |
| JP4812508B2 (ja) * | 2006-05-12 | 2011-11-09 | 富士通株式会社 | プレゼンス情報を取り扱うシステム |
| US7424591B2 (en) * | 2006-06-19 | 2008-09-09 | International Business Machines Corporation | Splash tables: an efficient hash scheme for processors |
| US7792877B2 (en) * | 2007-05-01 | 2010-09-07 | Microsoft Corporation | Scalable minimal perfect hashing |
| US7872648B2 (en) * | 2007-06-14 | 2011-01-18 | Microsoft Corporation | Random-access vector graphics |
| US9425825B2 (en) | 2012-05-22 | 2016-08-23 | International Business Machines Corporation | Path encoding and decoding |
| GB2533391A (en) | 2014-12-19 | 2016-06-22 | Ibm | Wall encoding and decoding |
| GB2533393A (en) | 2014-12-19 | 2016-06-22 | Ibm | Pad encoding and decoding |
| GB2533392A (en) | 2014-12-19 | 2016-06-22 | Ibm | Path encoding and decoding |
| US9950261B2 (en) | 2016-04-29 | 2018-04-24 | International Business Machines Corporation | Secure data encoding for low-resource remote systems |
| US10515064B2 (en) | 2016-07-11 | 2019-12-24 | Microsoft Technology Licensing, Llc | Key-value storage system including a resource-efficient index |
| CN114244817A (zh) * | 2021-11-30 | 2022-03-25 | 慧之安信息技术股份有限公司 | 一种基于osip协议栈头域的哈希冲突处理方法和装置 |
| CN120167063A (zh) * | 2022-11-18 | 2025-06-17 | 维萨国际服务协会 | 用于在数据库中执行基于mph的记录查找的系统和方法 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4215402A (en) * | 1978-10-23 | 1980-07-29 | International Business Machines Corporation | Hash index table hash generator apparatus |
| US4488256A (en) * | 1981-11-23 | 1984-12-11 | Motorola, Inc. | Memory management unit having means for detecting and preventing mapping conflicts |
| US5293593A (en) * | 1990-10-11 | 1994-03-08 | Hewlett-Packard Company | Method and apparatus for the mapping of physically non-contiguous memory fragments to be linearly addressable |
| US5377340A (en) * | 1991-06-18 | 1994-12-27 | Hewlett-Packard Company | Method and apparatus for memory interleaving using an improved hashing scheme |
| US5584005A (en) * | 1993-02-05 | 1996-12-10 | Fujitsu Limited | Virtual memory address translation apparatus and method using link, auxiliary link and page tables |
Family Cites Families (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4115765A (en) * | 1977-02-17 | 1978-09-19 | Xerox Corporation | Autonomous display processor |
| US4433389A (en) * | 1978-12-26 | 1984-02-21 | Burroughs Corporation | Memory address translation system for accessing memory locations via job names |
| US5133061A (en) * | 1987-10-29 | 1992-07-21 | International Business Machines Corporation | Mechanism for improving the randomization of cache accesses utilizing abit-matrix multiplication permutation of cache addresses |
| US5111389A (en) * | 1987-10-29 | 1992-05-05 | International Business Machines Corporation | Aperiodic mapping system using power-of-two stride access to interleaved devices |
| US6014733A (en) * | 1997-06-05 | 2000-01-11 | Microsoft Corporation | Method and system for creating a perfect hash using an offset table |
-
1997
- 1997-06-05 US US08/869,913 patent/US6014733A/en not_active Expired - Lifetime
-
1998
- 1998-06-04 WO PCT/US1998/011680 patent/WO1998055929A1/en not_active Ceased
- 1998-06-04 CN CNB988011085A patent/CN1206604C/zh not_active Expired - Fee Related
- 1998-06-04 AU AU78211/98A patent/AU7821198A/en not_active Abandoned
- 1998-06-04 JP JP50295599A patent/JP4965009B2/ja not_active Expired - Fee Related
-
2009
- 2009-05-20 JP JP2009122449A patent/JP4717130B2/ja not_active Expired - Fee Related
-
2010
- 2010-09-21 JP JP2010211217A patent/JP4717154B2/ja not_active Expired - Fee Related
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4215402A (en) * | 1978-10-23 | 1980-07-29 | International Business Machines Corporation | Hash index table hash generator apparatus |
| US4488256A (en) * | 1981-11-23 | 1984-12-11 | Motorola, Inc. | Memory management unit having means for detecting and preventing mapping conflicts |
| US5293593A (en) * | 1990-10-11 | 1994-03-08 | Hewlett-Packard Company | Method and apparatus for the mapping of physically non-contiguous memory fragments to be linearly addressable |
| US5377340A (en) * | 1991-06-18 | 1994-12-27 | Hewlett-Packard Company | Method and apparatus for memory interleaving using an improved hashing scheme |
| US5584005A (en) * | 1993-02-05 | 1996-12-10 | Fujitsu Limited | Virtual memory address translation apparatus and method using link, auxiliary link and page tables |
Non-Patent Citations (1)
| Title |
|---|
| SEDGEWICK R.: "ALGORITHMS IN C++, PASSAGE.", ALGORITHMS IN C++., XX, XX, 1 January 1992 (1992-01-01), XX, pages 231 - 243., XP002911449 * |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6591250B1 (en) * | 1998-02-23 | 2003-07-08 | Genetic Anomalies, Inc. | System and method for managing virtual property |
| US20220121962A1 (en) * | 2021-01-11 | 2022-04-21 | Qingdao University | BlockNet security organization storage mapping method for spatial data |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2000517086A (ja) | 2000-12-19 |
| JP2011003214A (ja) | 2011-01-06 |
| AU7821198A (en) | 1998-12-21 |
| US6014733A (en) | 2000-01-11 |
| JP4965009B2 (ja) | 2012-07-04 |
| JP2009217839A (ja) | 2009-09-24 |
| CN1206604C (zh) | 2005-06-15 |
| JP4717154B2 (ja) | 2011-07-06 |
| CN1236454A (zh) | 1999-11-24 |
| JP4717130B2 (ja) | 2011-07-06 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6014733A (en) | Method and system for creating a perfect hash using an offset table | |
| US4991087A (en) | Method of using signature subsets for indexing a textual database | |
| US6067547A (en) | Hash table expansion and contraction for use with internal searching | |
| US6725223B2 (en) | Storage format for encoded vector indexes | |
| US6671694B2 (en) | System for and method of cache-efficient digital tree with rich pointers | |
| US6678687B2 (en) | Method for creating an index and method for searching an index | |
| US5497485A (en) | Method and apparatus for implementing Q-trees | |
| Faloutsos | Multiattribute hashing using gray codes | |
| EP0124097B1 (en) | Method for storing and retrieving data in a data base | |
| KR100880531B1 (ko) | 단일 데이터 검색을 위한 파일 생성 방법 및 단일 데이터파일의 검색방법 그리고 단일 파일 검색을 위한 rat파일이 저장된 기록매체 | |
| US6430672B1 (en) | Method for performing address mapping using two lookup tables | |
| KR20090048624A (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
| WO2014047214A1 (en) | Hierarchical ordering of strings | |
| US5398338A (en) | Record retrieval method using key bondary value table and condition valid status table | |
| CN101084484A (zh) | 用于快速存取堆栈存储器的方法和系统 | |
| CN1335958A (zh) | 变指令长度处理 | |
| CN101582091B (zh) | 一种词库创建方法和系统,及相应的单词查询方法和系统 | |
| JP4159761B2 (ja) | Fftのためのインプレイスメモリ管理 | |
| US6901396B1 (en) | Packed radix search tree implementation | |
| JP3288063B2 (ja) | 可変長データの格納および参照システム | |
| US6742077B1 (en) | System for accessing a memory comprising interleaved memory modules having different capacities | |
| CN100383791C (zh) | 基于位的排序方法和装置 | |
| CN110598020B (zh) | 二值图像检索方法 | |
| JP3564173B2 (ja) | 相対編成フアイルのアクセス装置 | |
| CN121144347A (zh) | 多维数组存储和查询优化方法及装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| WWE | Wipo information: entry into national phase |
Ref document number: 98801108.5 Country of ref document: CN |
|
| AK | Designated states |
Kind code of ref document: A1 Designated state(s): AL AM AT AU AZ BA BB BG BR BY CA CH CN CU CZ DE DK EE ES FI GB GE GH GM GW HU ID IL IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT UA UG UZ VN YU ZW |
|
| AL | Designated countries for regional patents |
Kind code of ref document: A1 Designated state(s): GH GM KE LS MW SD SZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN ML MR NE SN TD TG |
|
| ENP | Entry into the national phase |
Ref document number: 1999 502955 Country of ref document: JP Kind code of ref document: A |
|
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
| REG | Reference to national code |
Ref country code: DE Ref legal event code: 8642 |
|
| NENP | Non-entry into the national phase |
Ref country code: CA |
|
| 122 | Ep: pct application non-entry in european phase |