1 / 36

Hashing Rehashed Paul M. Dorfman, Independent Consultant

Hashing Rehashed Paul M. Dorfman, Independent Consultant Gregg P. Snell, Data Savant Consulting. SUGI 27, Paper 12 Orlando, FL. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214. ARRAY SUV(0:99999) SUV(00000)=.

vienna
Download Presentation

Hashing Rehashed Paul M. Dorfman, Independent Consultant

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hashing Rehashed Paul M. Dorfman, Independent Consultant Gregg P. Snell, Data Savant Consulting SUGI 27, Paper 12 Orlando, FL

  2. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=. SUV(66216)=. … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  3. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=. SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  4. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=. SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  5. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=. SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  6. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=88 SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  7. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=. SUV(32258)=88 SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  8. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=214 SUV(32258)=88 SUV(66216)=67 … SUV(99999)=. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  9. ARRAY SUV(0:99999) SUV(00000)=. SUV(00001)=. … SUV(27513)=214 SUV(32258)=88 SUV(66216)=67 … SUV(99999)=. MYLIB.SUVBYZIP ZIP CITY SUV 66216 Shawnee 67 66216 Shawnee-Mission 67 32258 Jacksonville 88 27513 Cary 214 KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  10. KEY- INDEXING data TESTLIB.CUSTOMER; ** load suv counts into the array; array suv(0:99999) _temporary_; dountil(eof1); /* source not sorted */ set MYLIB.SUVBYZIP(keep=zipcode suv_count) end=eof1; if suv(zipcode) = .then suv(zipcode) = suv_count; end; ** add suv_count to master data set; dountil(eof2); set PRODLIB.CUSTOMER end=eof2; /* assign count by directly addressing the array*/ suv_count=suv(zip5); /* be sure to drop unwanted fields introduced during table load */ drop zipcode; output; end; run; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  11. KEY HASH_ADDR HASH_TABLE 185 04 (00)=. 971 10 (01)=260 400 11 (02)=. 260 01 (03)=. 922 13 (04)=185 970 09 (05)=. 543 11 (06)=. (07)=. (08)=. (09)=970 (10)=971 (11)=400 (12)=. (13)=922 Hash Hash Hash Hash Hash Hash COLLISION RESOLUTION POLICY: LINEAR PROBING Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  12. KEYHASH_ADDR HASH_TABLE 185 04 (00)=. 971 10 (01)=260 400 11 (02)=. 260 01 (03)=. 922 13 (04)=185 970 09 (05)=. 543 11 (06)=. (07)=. (08)=. (09)=970 (10)=971 (11)=400 (12)=. (13)=922 Hash COLLISION COLLISION RESOLUTION POLICY: LINEAR PROBING data_null_; array hash_table(0:&hash_size) _temporary_; dountil(eof1); set small end=eof1; do hash_addr=mod(key,&hash_size)+1 by -1until (hash_table(hash_addr)=. or hash_table(hash_addr)=key); if hash_addr < 0then hash_addr=&hash_size-1; end; hash_table(hash_addr) = key; end; /* all done, write results to the log */ put'hash_table'; do i=0to &hash_size; put'(' i z2.')=' hash_table(i) z3.; end; run; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  13. KEYHASH_ADDR HASH_TABLE 185 04 (00)=. 971 10 (01)=260 400 11 (02)=. 260 01 (03)=. 922 13 (04)=185 970 09 (05)=. 543 11 (06)=. (07)=. (08)=543 (09)=970 (10)=971 (11)=400 (12)=. (13)=922 COLLISION COLLISION RESOLUTION POLICY: LINEAR PROBING data_null_; array hash_table(0:&hash_size) _temporary_; dountil(eof1); set small end=eof1; do hash_addr=mod(key,&hash_size)+1 by -1until (hash_table(hash_addr)=. or hash_table(hash_addr)=key); if hash_addr < 0then hash_addr=&hash_size-1; end; hash_table(hash_addr) = key; end; /* all done, write results to the log */ put'hash_table'; do i=0to &hash_size; put'(' i z2.')=' hash_table(i) z3.; end; run; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  14. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=. (09)=. (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 Hash Hash Hash Hash Hash COLLISION RESOLUTION POLICY: COALESCED CHAINING Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  15. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=. (09)=. (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 Step 1 Step 2 COLLISION RESOLUTION POLICY: COALESCED CHAINING /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  16. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=. (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 Step 3 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  17. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 Step 4 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 3 Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  18. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 COLLISION Step 2 Step 1 COLLISION RESOLUTION POLICY: COALESCED CHAINING /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  19. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 COLLISION Step 2 0 ? COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 2.a (check for duplicates) */ traverse: if key = hash_table(hash_addr) then found=1; elseif link_to_next(hash_addr) ne 0 thendo; hash_addr=link_to_next(hash_addr); goto traverse; end; Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  20. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=0 (11)=400 (12)=. (12)=. (13)=0(13)=922 COLLISION Step 2 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 2.b (follow next_key to empty node) */ do next_key = &hash_size by -1 until(link_to_next(next_key)=.); end; /* STEP 2.c (change original linkfrom 0 to next */ link_to_next(hash_addr)=next_key; hash_addr = next_key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  21. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=. (12)=. (13)=0(13)=922 Step 2 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 2.b (follow next_key to empty node) */ do next_key = &hash_size by -1 until(link_to_next(next_key)=.); end; /* STEP 2.c (change original linkfrom 0 to next */ link_to_next(hash_addr)=next_key; hash_addr = next_key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  22. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=. (12)=. (13)=0(13)=922 Step 2 Step 3 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  23. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=. (13)=0(13)=922 Step 2 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 3 Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  24. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=0(13)=922 Step 4 Step 2 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 3 Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  25. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=0(13)=922 COLLISION Step 2 Step 1 COLLISION RESOLUTION POLICY: COALESCED CHAINING /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  26. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=0(13)=922 COLLISION 0 ? COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 2.a (check for duplicates) */ traverse: if key = hash_table(hash_addr) then found=1; elseif link_to_next(hash_addr) ne 0 thendo; hash_addr=link_to_next(hash_addr); goto traverse; end; Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  27. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=0(13)=922 COLLISION COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 2.b (follow next_key to empty node) */ do next_key = &hash_size by -1 until(link_to_next(next_key)=.); end; /* STEP 2.c (change original linkfrom 0 to next */ link_to_next(hash_addr)=next_key; hash_addr = next_key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  28. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=8(13)=922 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 2.b (follow next_key to empty node) */ do next_key = &hash_size by -1 until(link_to_next(next_key)=.); end; /* STEP 2.c (change original linkfrom 0 to next */ link_to_next(hash_addr)=next_key; hash_addr = next_key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  29. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=. (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=8(13)=922 Step 3 COLLISION RESOLUTION POLICY: COALESCED CHAINING Step 2 Step 1 /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  30. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=0 (08)=. (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=8(13)=922 Step 1 Step 2 Step 3 COLLISION RESOLUTION POLICY: COALESCED CHAINING /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  31. KEY HASH_ADDR LINK_TO_NEXT HASH_TABLE 185 04 (00)=. (00)=. 971 10 (01)=0 (01)=260 400 11 (02)=. (02)=. 260 01 (03)=. (03)=. 922 13 (04)=0 (04)=185 970 09 (05)=. (05)=. 543 11 (06)=. (06)=. 532 13 (07)=. (07)=. (08)=0 (08)=532 (09)=0 (09)=970 (10)=0 (10)=971 (11)=12 (11)=400 (12)=0 (12)=543 (13)=8(13)=922 Step 1 Step 2 Step 3 COLLISION RESOLUTION POLICY: COALESCED CHAINING /* STEP 1 (hash the key) */ hash_addr = mod(key,&hash_size)+1; /* STEP 2 (collision?) */ if link_to_next(hash_addr) >.thendo; end; /* STEP 3 (mark link as occupied) */ link_to_next(hash_addr) = 0; /* STEP 4 (store the key) */ hash_table(hash_addr) = key; Step 2c Step 2b Step 2a Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

  32. BENCHMARKING Hashing Rehashed SUGI 27, Paper 12 Dorfman and Snell

More Related