Hashing
Nishant Mehta
Lectures 15 and 16
Warm-up puzzle
We have a deck of n distinct cards (where n is large) and repeatedly sample a card uniformly at random, with replacement. On average, how many cards do we need to draw before we see some card twice (that is, before we have repeated a card)?
(a)
(b)
(c)
(d)
(e)
Θ(n2)Θ(n)
Θ ( n)Θ(log n)Θ(1)
Warm-up puzzle
We have a deck of n distinct cards (where n is large) and repeatedly sample a card uniformly at random, with replacement. On average, how many cards do we need to draw before we see some card twice (that is, before we have repeated a card)?
(a)
(b)
(c)
(d)
(e)
Θ(n2)Θ(n)
Θ ( n)Θ(log n)Θ(1)
For some amusing reading, check out the birthday paradox in Section 5.4.1 of CLRS
Dictionary
A dictionary is a data structure that contains key-value pairs
• Keys should be unique
• Values can be anything and need not be unique
Dictionary - Operations
SEARCH - Need to specify key k
INSERT - Need to specify object x (obtain key via x.key)
DELETE - Need to specify object x
• We will see later why it is better to take as input x rather than x.key
Unordered list
Suppose that we use an unordered list (let’s make it a doubly linked list)
SEARCH( )
INSERT( )
DELETE( )
S, k
S, x
S, x
Operation
head<latexit sha1_base64="+bv/2VrEDB1Owgg+IU6rqQX8BVY=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyYCgy0olBdQCZWDaSkkYOZ6bGWscJ9gOdGTyCWzhb/gP9uwQW9Y4D6CTqaVIx+dx740TRxmjUnW735eWrXPnL1xcudS5fOXqteurazcOZZoLAgOSslQcR1gCoxwGiioGx5kAnEQMjqLpTqkffQAhacrfqlkGYYLHnMaUYGWoN9Phg+Gq093sVsteBG4DHNSsg+Ga5QSjlOQJcEUYltJ3u5kKNRaKEgZFJ8glZJhM8Rh8AzlOQIa6mrWw7xhmZMepMA9XdsWeTmicSDlLIuNMsJrItlaSZ2l+ruKtUFOe5Qo4qRvFObNVapcvbo+oAKLYzABMBDWz2mSCBSbKHM9cJW+w7/Wf9j1v7x7kDMRYAExDLTGvu3eCv7DTCZ6AOQMBL8zuVQYCq1ToQKqUTBi8L3SgBMV8zIBBrAxxZmBDBxnNQBr7p8LU5PCRpEmC+UgHIBJDT7DScTE05eBESaJLtijmnSyVZQVgrCWcyEry3bA2DbXjFvZ9u9nE7zbapeoEVoXfO51Zd3p353Mls5AVVE7rbp7t202xqmfY8npm3rQ5hPI30UH1XWPtLbzdblGLBDO92xaf7zSqSLTBLXVv/79qcEutpv2n98td2wGYycYSRbrf1jlWuZizvCwKc63c9iVaBIe9TffRpvv6obO91VywFXQL3UbryEWP0TZ6hg7QABE0Rp/RF/TV+mb9sH5av2rr8lKTuYnmlvX7D168dyg=</latexit>
k3<latexit sha1_base64="aDQx3cDpNjiS589MrWQsOX12kBE=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQpGkxGCLiuVFFALlIFpKyXpyPHczFjjOMF2oJXJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXrfV9ati5cvHR55Urn6rXrN26urt06kGkuCAxJylJxFGEJjHIYKqoYHGUCcBIxOIxm26V++AGEpCl/p04zCBM84TSmBCtDvZ2N3NGq0+v2qmUvArcBDmrW/mjNcoJxSvIEuCIMS+m7vUyFGgtFCYOiE+QSMkxmeAK+gRwnIENdzVrY9wwztuNUmIcru2LPJjROpDxNIuNMsJrKtlaS52l+ruLNUFOe5Qo4qRvFObNVapcvbo+pAKLYqQGYCGpmtckUC0yUOZ65St5wzxs8G3je7gPIGYiJAJiFWmJed+8Ef2GnEzwFcwYCXprd6wwEVqnQgVQpmTJ4X+hACYr5hAGDWBni3MCGDjKagTT2T4WpyeEjSZME87EOQCSGnmKl42JkysGJkkSXbFHMO1kqywrAWEs4kZXku2FtGmnHLeyHdrOJjzfapeoEVoXfP5tZd/r353Mls5AVVM7qbp7t202xqmfY8npm3rQ5hPI30UH1XWPtLbzdTlGLBDO90xZfbDeqSLTBLXV3779qcEutpv2nD8pd2wGYycYSRXrQ1jlWuZizvCoKc63c9iVaBAf9rvu467555GxtNhdsBd1Bd9E6ctETtIWeo300RARN0Gf0BX21vlk/rJ/Wr9q6vNRkbqO5Zf3+A1cQdyY=</latexit>
k1<latexit sha1_base64="dKmaXMDiviDazSf9qUjcNYU058w=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyQiVLiuVFFALlIFpKyVh5HhuZqxxnGA70JHJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXtfl9ati5cvHR55Urn6rXrN26urt06kmkuCAxIylJxEmEJjHIYKKoYnGQCcBIxOI6mu6V+/AGEpCl/q2YZhAkecxpTgpWh3kyHW8NVp7vZrZa9CNwGOKhZh8M1ywlGKckT4IowLKXvdjMVaiwUJQyKTpBLyDCZ4jH4BnKcgAx1NWth3zPMyI5TYR6u7Io9m9A4kXKWRMaZYDWRba0kz9P8XMXboaY8yxVwUjeKc2ar1C5f3B5RAUSxmQGYCGpmtckEC0yUOZ65St7gwOs/7Xve/gPIGYixAJiGWmJed+8Ef2GnEzwBcwYCXpjdqwwEVqnQgVQpmTB4X+hACYr5mAGDWBni3MCGDjKagTT2T4WpyeEjSZME85EOQCSGnmCl42JoysGpkkSXbFHMO1kqywrAWEs4lZXku2FtGmrHLeyHdrOJ3220S9UJrAq/dzaz7vTuz+dKZiErqJzW3Tzbt5tiVc+w5fXMvGlzCOVvooPqu8baW3i7vaIWCWZ6ry0+321UkWiDW+r+wX/V4JZaTftP75e7tgMwk40linS/rXOscjFneVkU5lq57Uu0CI56m+7Wpvv6kbOz3VywFXQH3UXryEWP0Q56hg7RABE0Rp/RF/TV+mb9sH5av2rr8lKTuY3mlvX7D2o+dys=</latexit>
k6<latexit sha1_base64="QfGOga0xAyr+3iTsmpaIP/B7m2c=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyaiCLiuVFFALlIFpKyVh5HhuZqxxnGA70JHJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXtfl9ati5cvHR55Urn6rXrN26urt06kmkuCAxIylJxEmEJjHIYKKoYnGQCcBIxOI6mu6V+/AGEpCl/q2YZhAkecxpTgpWh3kyHW8NVp7vZrZa9CNwGOKhZh8M1ywlGKckT4IowLKXvdjMVaiwUJQyKTpBLyDCZ4jH4BnKcgAx1NWth3zPMyI5TYR6u7Io9m9A4kXKWRMaZYDWRba0kz9P8XMXboaY8yxVwUjeKc2ar1C5f3B5RAUSxmQGYCGpmtckEC0yUOZ65St7gwOs/7Xve/gPIGYixAJiGWmJed+8Ef2GnEzwBcwYCXpjdqwwEVqnQgVQpmTB4X+hACYr5mAGDWBni3MCGDjKagTT2T4WpyeEjSZME85EOQCSGnmCl42JoysGpkkSXbFHMO1kqywrAWEs4lZXku2FtGmrHLeyHdrOJ3220S9UJrAq/dzaz7vTuz+dKZiErqJzW3Tzbt5tiVc+w5fXMvGlzCOVvooPqu8baW3i7vaIWCWZ6ry0+321UkWiDW+r+wX/V4JZaTftP75e7tgMwk40linS/rXOscjFneVkU5lq57Uu0CI56m+6jTff1lrOz3VywFXQH3UXryEWP0Q56hg7RABE0Rp/RF/TV+mb9sH5av2rr8lKTuY3mlvX7D2KSdyk=</latexit>
k4
Worst-case running time? (for n elements)
Unordered list
Suppose that we use an unordered list (let’s make it a doubly linked list)
SEARCH( )
INSERT( )
DELETE( )
S, k
S, x
S, x
Operation
head<latexit sha1_base64="+bv/2VrEDB1Owgg+IU6rqQX8BVY=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyYCgy0olBdQCZWDaSkkYOZ6bGWscJ9gOdGTyCWzhb/gP9uwQW9Y4D6CTqaVIx+dx740TRxmjUnW735eWrXPnL1xcudS5fOXqteurazcOZZoLAgOSslQcR1gCoxwGiioGx5kAnEQMjqLpTqkffQAhacrfqlkGYYLHnMaUYGWoN9Phg+Gq093sVsteBG4DHNSsg+Ga5QSjlOQJcEUYltJ3u5kKNRaKEgZFJ8glZJhM8Rh8AzlOQIa6mrWw7xhmZMepMA9XdsWeTmicSDlLIuNMsJrItlaSZ2l+ruKtUFOe5Qo4qRvFObNVapcvbo+oAKLYzABMBDWz2mSCBSbKHM9cJW+w7/Wf9j1v7x7kDMRYAExDLTGvu3eCv7DTCZ6AOQMBL8zuVQYCq1ToQKqUTBi8L3SgBMV8zIBBrAxxZmBDBxnNQBr7p8LU5PCRpEmC+UgHIBJDT7DScTE05eBESaJLtijmnSyVZQVgrCWcyEry3bA2DbXjFvZ9u9nE7zbapeoEVoXfO51Zd3p353Mls5AVVE7rbp7t202xqmfY8npm3rQ5hPI30UH1XWPtLbzdblGLBDO92xaf7zSqSLTBLXVv/79qcEutpv2n98td2wGYycYSRbrf1jlWuZizvCwKc63c9iVaBIe9TffRpvv6obO91VywFXQL3UbryEWP0TZ6hg7QABE0Rp/RF/TV+mb9sH5av2rr8lKTuYnmlvX7D168dyg=</latexit>
k3<latexit sha1_base64="aDQx3cDpNjiS589MrWQsOX12kBE=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQpGkxGCLiuVFFALlIFpKyXpyPHczFjjOMF2oJXJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXrfV9ati5cvHR55Urn6rXrN26urt06kGkuCAxJylJxFGEJjHIYKqoYHGUCcBIxOIxm26V++AGEpCl/p04zCBM84TSmBCtDvZ2N3NGq0+v2qmUvArcBDmrW/mjNcoJxSvIEuCIMS+m7vUyFGgtFCYOiE+QSMkxmeAK+gRwnIENdzVrY9wwztuNUmIcru2LPJjROpDxNIuNMsJrKtlaS52l+ruLNUFOe5Qo4qRvFObNVapcvbo+pAKLYqQGYCGpmtckUC0yUOZ65St5wzxs8G3je7gPIGYiJAJiFWmJed+8Ef2GnEzwFcwYCXprd6wwEVqnQgVQpmTJ4X+hACYr5hAGDWBni3MCGDjKagTT2T4WpyeEjSZME87EOQCSGnmKl42JkysGJkkSXbFHMO1kqywrAWEs4kZXku2FtGmnHLeyHdrOJjzfapeoEVoXfP5tZd/r353Mls5AVVM7qbp7t202xqmfY8npm3rQ5hPI30UH1XWPtLbzdTlGLBDO90xZfbDeqSLTBLXV3779qcEutpv2nD8pd2wGYycYSRXrQ1jlWuZizvCoKc63c9iVaBAf9rvu467555GxtNhdsBd1Bd9E6ctETtIWeo300RARN0Gf0BX21vlk/rJ/Wr9q6vNRkbqO5Zf3+A1cQdyY=</latexit>
k1<latexit sha1_base64="dKmaXMDiviDazSf9qUjcNYU058w=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyQiVLiuVFFALlIFpKyVh5HhuZqxxnGA70JHJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXtfl9ati5cvHR55Urn6rXrN26urt06kmkuCAxIylJxEmEJjHIYKKoYnGQCcBIxOI6mu6V+/AGEpCl/q2YZhAkecxpTgpWh3kyHW8NVp7vZrZa9CNwGOKhZh8M1ywlGKckT4IowLKXvdjMVaiwUJQyKTpBLyDCZ4jH4BnKcgAx1NWth3zPMyI5TYR6u7Io9m9A4kXKWRMaZYDWRba0kz9P8XMXboaY8yxVwUjeKc2ar1C5f3B5RAUSxmQGYCGpmtckEC0yUOZ65St7gwOs/7Xve/gPIGYixAJiGWmJed+8Ef2GnEzwBcwYCXpjdqwwEVqnQgVQpmTB4X+hACYr5mAGDWBni3MCGDjKagTT2T4WpyeEjSZME85EOQCSGnmCl42JoysGpkkSXbFHMO1kqywrAWEs4lZXku2FtGmrHLeyHdrOJ3220S9UJrAq/dzaz7vTuz+dKZiErqJzW3Tzbt5tiVc+w5fXMvGlzCOVvooPqu8baW3i7vaIWCWZ6ry0+321UkWiDW+r+wX/V4JZaTftP75e7tgMwk40linS/rXOscjFneVkU5lq57Uu0CI56m+7Wpvv6kbOz3VywFXQH3UXryEWP0Q56hg7RABE0Rp/RF/TV+mb9sH5av2rr8lKTuY3mlvX7D2o+dys=</latexit>
k6<latexit sha1_base64="QfGOga0xAyr+3iTsmpaIP/B7m2c=">AAAEPHicbVPLbtQwFHUbHmV4tbBkExEhlQqqyaiCLiuVFFALlIFpKyVh5HhuZqxxnGA70JHJJ7CFv+E/2LNDbFnjPIBOppYiHZ/HvTdOHGWMStXtfl9ati5cvHR55Urn6rXrN26urt06kmkuCAxIylJxEmEJjHIYKKoYnGQCcBIxOI6mu6V+/AGEpCl/q2YZhAkecxpTgpWh3kyHW8NVp7vZrZa9CNwGOKhZh8M1ywlGKckT4IowLKXvdjMVaiwUJQyKTpBLyDCZ4jH4BnKcgAx1NWth3zPMyI5TYR6u7Io9m9A4kXKWRMaZYDWRba0kz9P8XMXboaY8yxVwUjeKc2ar1C5f3B5RAUSxmQGYCGpmtckEC0yUOZ65St7gwOs/7Xve/gPIGYixAJiGWmJed+8Ef2GnEzwBcwYCXpjdqwwEVqnQgVQpmTB4X+hACYr5mAGDWBni3MCGDjKagTT2T4WpyeEjSZME85EOQCSGnmCl42JoysGpkkSXbFHMO1kqywrAWEs4lZXku2FtGmrHLeyHdrOJ3220S9UJrAq/dzaz7vTuz+dKZiErqJzW3Tzbt5tiVc+w5fXMvGlzCOVvooPqu8baW3i7vaIWCWZ6ry0+321UkWiDW+r+wX/V4JZaTftP75e7tgMwk40linS/rXOscjFneVkU5lq57Uu0CI56m+6jTff1lrOz3VywFXQH3UXryEWP0Q56hg7RABE0Rp/RF/TV+mb9sH5av2rr8lKTuY3mlvX7D2KSdyk=</latexit>
k4
Worst-case running time? (for n elements)
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="v+tlRz4Rf3bxGkqSMky8pl3gwyA=">AAAEPXicdVPdbtMwFPYWfkb52+CSG4sKaZugSsYK692kkQHaYKOi26QmVI570kZ1nGA7sMnkFbiFt+E5eADuELfc4qQZrNmwFOnz93POiRMHKYuksu3vc/PWpctXri5ca1y/cfPW7cWlOwcyyQSFHk1YIo4CIoFFHHoqUgyOUgEkDhgcBpOtQj/8AEJGCX+rTlLwYzLiURhRogpqb5mvDBabdstud9qOje1W23Y6jwvQ6Wyst9vYadnlaqJq7Q+WrKY3TGgWA1eUESn7jp0qXxOhIsogb3iZhJTQCRlB30BOYpC+LofN8QPDDHGYCPNwhUv2bEKTWMqTODDOmKixrGsFeZHWz1S44euIp5kCTqeNwoxhleDizfEwEkAVOzGAUBGZWTEdE0GoMuczU8nt7brd513X3XkIGQMxEgATX0vCp90b3ilsNLxnYM5AwCuz20tBEJUI7UmV0DGD97n2lIgIHzFgECpDXBhY1V4apSCN/VNuanL4SJM4JnyoPRCxocdE6TAfmHJwrCTVBZvns06WyKICMFYTjmUp9R1/ahroppPjR7jahO9W66WmCaLy/trZzHJzbWU2VzDnsiKSk2k3F/dxVazs6de8rpk3qQ6h+E20V37XULvn3m47n4qUML1dF19uVaqItcE1dWf3n2pwTS2n/at3i13dAYTJyhIEulvXOVGZmLG8znNzrU7vDv4/OFhrOU9a62/Wm5ub1QVbQPfQfbSMHPQUbaIXaB/1EEVj9Bl9QV+tb9YP66f1a2qdn6syd9HMsn7/AfBYd5w=</latexit>
O(n)
Ordered list
If we use an ordered list (in the form of an array), then searching is fast; other operations are slow
SEARCH( ) - binary search enables O(log n)
INSERT( ) - O(n)
DELETE( ) - O(n)
S, k
S, x
S, x
k0
k1
k3
k4
k7
k6
0 1 2 3 4 5 6 7
k2
k5
<latexit sha1_base64="lYwq47fctIgUMftjMQ+cX5w/RWY=">AAAEWXicdVNdb9MwFPW2AqN8dewRCVlUSGOCKikrWyUeJo0M0AaMim6TmhA57k0b1fnAdmCTyRu/hlf4M4g/g/MxWLNhKdG555x7r30TewkLhDSMXwuLS40rV68tX2/euHnr9p3Wyt1DEaecwpDGLObHHhHAggiGMpAMjhMOJPQYHHmznVw/+gxcBHH0QZ4m4IRkEgV+QInUlNu6P3MN/BzPXLN4d/XbZuNYiiLcdFtto2P0+j3TwEanZ5j9pzno97c2ej1sdoxitVG1DtyVpbY9jmkaQiQpI0KMTCORjiJcBpRB1rRTAQmhMzKBkYYRCUE4qjhIhh9qZoz9mOsnkrhgz2coEgpxGnraGRI5FXUtJy/TRqn0txwVREkqIaJlIz9lWMY4nwoeBxyoZKcaEMoDvVdMp4QTKvXs5ipZw31r8HJgWXuPIWXAJxxg5ihBorJ70z6Dzab9AvQMOLzR0bsEOJExV7aQMZ0y+JQpW/KARBMGDHypiUsT1pWdBAkIbf+a6ZoRfKFxGJJorGzgoaanRCo/c3U5OJGCqpzNsnkni0VeARirCSeikEamU5pc1TYz/ARXgf9xvV6qzCAyG3XP56y1u4/m83LmQi4PxKzsZuERrooVPZ2a19L7jash5L+Jsovv6ivrwul2s1KkhKnduvh6p1J5qDSuqXv7/1SNa2qx27/6II/qDiBMVBbPU4O6HhGZ8jnL2yzT1+rs7uD/g8Nux3zW2Xi/0d7eri7YMrqHHqA1ZKJNtI1eoQM0RBR9Q9/RD/Rz6XdjobHcaJbWxYUqZxXNrcbqH+AjfCs=</latexit>
k0 < k1 < k2 < . . . < k7
Balanced binary search tree
Another strategy is to use a balanced binary search tree (e.g., red-black tree, AVL tree)
SEARCH( ) - O(log n)
INSERT( ) - O(log n)
DELETE( ) - O(log n)
S, k
S, x
S, x
13.1 Properties of red-black trees 275
NIL NIL
NIL NIL NIL NILNIL
NIL NIL
NIL NIL
NIL NIL NIL NIL
NIL NIL NIL NIL
NIL NIL
26
41
4730
28 38
35 39
17
21
2319
20
14
16
15
10
127
31
1 1
2
1
1
2
1
1 1
2
3
1 1
11
2 1
2
3
(a)
26
41
4730
28 38
35 39
17
21
2319
20
14
16
15
10
127
3
(b)
26
41
4730
28 38
35 39
17
21
2319
20
14
16
15
10
127
3(c)
nil[T]
Figure 13.1 A red-black tree with black nodes darkened and red nodes shaded. Every node in ared-black tree is either red or black, the children of a red node are both black, and every simple pathfrom a node to a descendant leaf contains the same number of black nodes. (a) Every leaf, shownas a NIL, is black. Each non-NIL node is marked with its black-height; NIL’s have black-height 0.(b) The same red-black tree but with each NIL replaced by the single sentinel nil[T ], which is alwaysblack, and with black-heights omitted. The root’s parent is also the sentinel. (c) The same red-blacktree but with leaves and the root’s parent omitted entirely. We shall use this drawing style in theremainder of this chapter.
Direct-address table
Suppose the keys are in a universe
In a direct-address table, we create an array T of size m (initialize all entries to NULL)
Element with key k is stored in
SEARCH( ): return
INSERT( ):
DELETE( ): NULL
Space complexity?
S, k
S, x
S, x
Worst-case running time?
<latexit sha1_base64="blx1molF2hRbTfyD6B6oxDoTaSg=">AAAEVnicbVNbb9MwFPbWjo1y6+BxLxYV0pi6qZkQ8II0aWSANmBUdJvUhMpxT9qojh1sBzaZPPBreIV/A38G4VyANZ2lSJ+/yznOSRwkLFK61/u1tNxorlxbXbveunHz1u077fW7J0qkksKACibkWUAUsIjDQEeawVkigcQBg9Ngtp/rp59Aqkjw9/oiAT8mEx6FESXaUqP2xgA/w57BvS52uthjY6FVF8fbDvayUbvT2+kVCy8CpwIdVK3j0Xqj440FTWPgmjKi1NDpJdo3ROqIMshaXqogIXRGJjC0kJMYlG+Kt8jwA8uMcSikfbjGBXs5YUis1EUcWGdM9FTVtZy8ShumOnzqm4gnqQZOy0ZhyrAWOB8JHkcSqGYXFhAqI3tWTKdEEqrt4OYquYMjt/+i77qHXUgZyIkEmPlGEV52b3l/YavlPQc7Awmv7e5tApJoIY2ntKBTBh8z42kZET5hwCDUlrgysGW8JEpAWfuXzNbk8JmKOCZ8bDyQsaWnRJswG9lycK4VNTmbZfNOJlReARirCeeqkIaOX5pGpuNkeBtXm/DDVr1UmSA6G+5ezmx2dh/O53JmISsjNSu7uXiIq2JFT7/mde15RTWE/DcxXvFdQ+MuvN1BVoqUMHNQF1/tV6qMjcU19fDov2pxTS1O+0/v57u6AwhTlSUITL+uc6JTOWd5k+XXyqlfokVwsrvjPN5x3j3q7O1VF2wNbaD7aBM56AnaQy/RMRogir6ib+g7+tH42fjdXGmultblpSpzD82tZvsPOFp7qw==</latexit>
U = {0, 1, . . . ,m � 1}
<latexit sha1_base64="EmxZqOlKaZP2/pKWD3sXwqBrao8=">AAAEPXicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBo1q3SUmoHPdPa9Vxgu3AKpNX4BbehufgAbhD3HKLcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlh2qeQZjgCacxJViV1KE/C0frTne7Wy17GbgNcFCzDkYblhOMU5InwBVhWErf7WYq1FgoShgUnSCXkGEywxPwDeQ4ARnqatjCvmeYsR2nwjxc2RV7NqFxIuU8iYwzwWoq21pJnqf5uYqfhpryLFfASd0ozpmtUrt8c3tMBRDF5gZgIqiZ1SZTLDBR5nwWKnnDfW/wfOB5ew8gZyAmAmAWaol53b0T/IWdTvAMzBkIeGV2bzIQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwNbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQenShJdskWx6GSpLCsAYy3hVFaS74a1aaQdt7Af2s0mfrfVLlUnsCr83tnMptO7v5grmaWsoHJWd/Ns326KVT3Dltcz86bNIZS/iQ6q7xprb+ntdotaJJjp3bb4cqdRRaINbql7+/9Vg1tqNe0/fVDu2g7ATDaWKNKDts6xysWC5XVRmGvlti/RMjjqbbuPt923j5x+v7lga+gOuos2kYueoD56gQ7QEBE0RZ/RF/TV+mb9sH5av2rr6kqTuY0WlvX7D11gd7Q=</latexit>
T [k]
<latexit sha1_base64="EmxZqOlKaZP2/pKWD3sXwqBrao8=">AAAEPXicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBo1q3SUmoHPdPa9Vxgu3AKpNX4BbehufgAbhD3HKLcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlh2qeQZjgCacxJViV1KE/C0frTne7Wy17GbgNcFCzDkYblhOMU5InwBVhWErf7WYq1FgoShgUnSCXkGEywxPwDeQ4ARnqatjCvmeYsR2nwjxc2RV7NqFxIuU8iYwzwWoq21pJnqf5uYqfhpryLFfASd0ozpmtUrt8c3tMBRDF5gZgIqiZ1SZTLDBR5nwWKnnDfW/wfOB5ew8gZyAmAmAWaol53b0T/IWdTvAMzBkIeGV2bzIQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwNbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQenShJdskWx6GSpLCsAYy3hVFaS74a1aaQdt7Af2s0mfrfVLlUnsCr83tnMptO7v5grmaWsoHJWd/Ns326KVT3Dltcz86bNIZS/iQ6q7xprb+ntdotaJJjp3bb4cqdRRaINbql7+/9Vg1tqNe0/fVDu2g7ATDaWKNKDts6xysWC5XVRmGvlti/RMjjqbbuPt923j5x+v7lga+gOuos2kYueoD56gQ7QEBE0RZ/RF/TV+mb9sH5av2rr6kqTuY0WlvX7D11gd7Q=</latexit>
T [k]
<latexit sha1_base64="DUuyMKWwISTfOZdCW5F1fRa2q2M=">AAAEUHicbVNbb9MwGPXWAaPcNhBPvFhUSGOCqpkQ8II0aWSANmBU6zYpCZXjfmmtOk6wHWhl8mN4hX/DG/+EN3AuwJpiycrxOee75JMdppwp3ev9WFltrV24eGn9cvvK1WvXb2xs3jxRSSYpDGjCE3kWEgWcCRhopjmcpRJIHHI4Dad7hX76EaRiiTjW8xSCmIwFixgl2lLDjdvH3qzrx0RPZGymMM8D/AzPhhudXrdXLrwMnBp0UL2Ohputjj9KaBaD0JQTpTynl+rAEKkZ5ZC3/UxBSuiUjMGzUJAYVGDK/nN8zzIjHCXSbqFxyZ6PMCRWah6H1ll0qppaQf5P8zIdPQ0ME2mmQdCqUJRxrBNcDAOPmASq+dwCQiWzvWI6IZJQbUe2kMkdHLr9F33XPXgAGQc5lgDTwCgiqupt/w9st/3nYGcg4bU9vU1BEp1I4yud0AmHD7nxtWREjDlwiLQl/huwbfyUpaCs/XNucwr4RJM4JmJkfJCxpSdEmygf2nQw04qags3zRSdPVJEBOG8IM1VKnhNUpqHpODl+iOtD9H67maqKIDr3ds7HbHV27i/GFcxSrGRqWlVzsYfrZGXNoOF1bb9JPYTimpjydqrIuEt/t59XIiXc7DfFV3u1ai+2xQ314PCfanFDLbv9q/eLU9MBhKvaEoam39QF0ZlcsLzJc/usnOYjWgYnO13ncdd596izu1s/sHV0B91FW8hBT9AueomO0ABRZNAX9BV9a31v/Wz9WluprKv1F91CC2ut/Rs1p3zn</latexit>
T [x .key] = x
<latexit sha1_base64="/lv+jZ/czp8wt9MQa2b7CVUucnI=">AAAETnicbVNdb9MwFPXWAaN8beyRF4sKaUxQNRMCXpAmjQzQBoxq3SYloXLcm9aq4wTbgVUmv4VX+De88kd4Q+B8AGs6S5HOPefcj1zZYcqZ0r3ej6Xl1sqly1dWr7avXb9x89ba+u1jlWSSwoAmPJGnIVHAmYCBZprDaSqBxCGHk3C6W+gnH0EqlogjPUshiMlYsIhRoi01XNs48s66fkz0RMZmCrM8wM+Ga51et1cevAicGnRQfQ6H662OP0poFoPQlBOlPKeX6sAQqRnlkLf9TEFK6JSMwbNQkBhUYMrpc3zPMiMcJdJ+QuOSPZ9hSKzULA6ts5hTNbWCvEjzMh09DQwTaaZB0KpRlHGsE1ysAo+YBKr5zAJCJbOzYjohklBtFzZXyR0cuP0XfdfdfwAZBzmWANPAKCKq7m3/L2y3/edgdyDhtY3epiCJTqTxlU7ohMOH3PhaMiLGHDhE2hIXJmwZP2UpKGv/nNuaAj7RJI6JGBkfZGzpCdEmyoe2HJxpRU3B5vm8kyeqqACcN4QzVUqeE1Smoek4OX6I6yB6v9UsVWUQnXvb53M2O9v35/MKZiFXMjWturnYw3WxsmfQ8Lp23qReQnFNTHk3VWTchb/byyuREm72muKr3Vq119rihrp/8F+1uKGW0/7T+0XUdADhqraEoek3dUF0Jucsb/LcPiun+YgWwfF213ncdd496uzs1A9sFd1Bd9EmctATtINeokM0QBTN0Bf0FX1rfW/9bP1q/a6sy0t1zgaaOyurfwCxyn06</latexit>
T [x .key] =
Direct-address table
Suppose the keys are in a universe
In a direct-address table, we create an array T of size m (initialize all entries to NULL)
Element with key k is stored in
SEARCH( ): return
INSERT( ):
DELETE( ): NULL
Space complexity?
S, k
S, x
S, x
Worst-case running time?
<latexit sha1_base64="blx1molF2hRbTfyD6B6oxDoTaSg=">AAAEVnicbVNbb9MwFPbWjo1y6+BxLxYV0pi6qZkQ8II0aWSANmBUdJvUhMpxT9qojh1sBzaZPPBreIV/A38G4VyANZ2lSJ+/yznOSRwkLFK61/u1tNxorlxbXbveunHz1u077fW7J0qkksKACibkWUAUsIjDQEeawVkigcQBg9Ngtp/rp59Aqkjw9/oiAT8mEx6FESXaUqP2xgA/w57BvS52uthjY6FVF8fbDvayUbvT2+kVCy8CpwIdVK3j0Xqj440FTWPgmjKi1NDpJdo3ROqIMshaXqogIXRGJjC0kJMYlG+Kt8jwA8uMcSikfbjGBXs5YUis1EUcWGdM9FTVtZy8ShumOnzqm4gnqQZOy0ZhyrAWOB8JHkcSqGYXFhAqI3tWTKdEEqrt4OYquYMjt/+i77qHXUgZyIkEmPlGEV52b3l/YavlPQc7Awmv7e5tApJoIY2ntKBTBh8z42kZET5hwCDUlrgysGW8JEpAWfuXzNbk8JmKOCZ8bDyQsaWnRJswG9lycK4VNTmbZfNOJlReARirCeeqkIaOX5pGpuNkeBtXm/DDVr1UmSA6G+5ezmx2dh/O53JmISsjNSu7uXiIq2JFT7/mde15RTWE/DcxXvFdQ+MuvN1BVoqUMHNQF1/tV6qMjcU19fDov2pxTS1O+0/v57u6AwhTlSUITL+uc6JTOWd5k+XXyqlfokVwsrvjPN5x3j3q7O1VF2wNbaD7aBM56AnaQy/RMRogir6ib+g7+tH42fjdXGmultblpSpzD82tZvsPOFp7qw==</latexit>
U = {0, 1, . . . ,m � 1}
<latexit sha1_base64="EmxZqOlKaZP2/pKWD3sXwqBrao8=">AAAEPXicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBo1q3SUmoHPdPa9Vxgu3AKpNX4BbehufgAbhD3HKLcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlh2qeQZjgCacxJViV1KE/C0frTne7Wy17GbgNcFCzDkYblhOMU5InwBVhWErf7WYq1FgoShgUnSCXkGEywxPwDeQ4ARnqatjCvmeYsR2nwjxc2RV7NqFxIuU8iYwzwWoq21pJnqf5uYqfhpryLFfASd0ozpmtUrt8c3tMBRDF5gZgIqiZ1SZTLDBR5nwWKnnDfW/wfOB5ew8gZyAmAmAWaol53b0T/IWdTvAMzBkIeGV2bzIQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwNbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQenShJdskWx6GSpLCsAYy3hVFaS74a1aaQdt7Af2s0mfrfVLlUnsCr83tnMptO7v5grmaWsoHJWd/Ns326KVT3Dltcz86bNIZS/iQ6q7xprb+ntdotaJJjp3bb4cqdRRaINbql7+/9Vg1tqNe0/fVDu2g7ATDaWKNKDts6xysWC5XVRmGvlti/RMjjqbbuPt923j5x+v7lga+gOuos2kYueoD56gQ7QEBE0RZ/RF/TV+mb9sH5av2rr6kqTuY0WlvX7D11gd7Q=</latexit>
T [k]
<latexit sha1_base64="EmxZqOlKaZP2/pKWD3sXwqBrao8=">AAAEPXicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBo1q3SUmoHPdPa9Vxgu3AKpNX4BbehufgAbhD3HKLcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlh2qeQZjgCacxJViV1KE/C0frTne7Wy17GbgNcFCzDkYblhOMU5InwBVhWErf7WYq1FgoShgUnSCXkGEywxPwDeQ4ARnqatjCvmeYsR2nwjxc2RV7NqFxIuU8iYwzwWoq21pJnqf5uYqfhpryLFfASd0ozpmtUrt8c3tMBRDF5gZgIqiZ1SZTLDBR5nwWKnnDfW/wfOB5ew8gZyAmAmAWaol53b0T/IWdTvAMzBkIeGV2bzIQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwNbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQenShJdskWx6GSpLCsAYy3hVFaS74a1aaQdt7Af2s0mfrfVLlUnsCr83tnMptO7v5grmaWsoHJWd/Ns326KVT3Dltcz86bNIZS/iQ6q7xprb+ntdotaJJjp3bb4cqdRRaINbql7+/9Vg1tqNe0/fVDu2g7ATDaWKNKDts6xysWC5XVRmGvlti/RMjjqbbuPt923j5x+v7lga+gOuos2kYueoD56gQ7QEBE0RZ/RF/TV+mb9sH5av2rr6kqTuY0WlvX7D11gd7Q=</latexit>
T [k]
<latexit sha1_base64="DUuyMKWwISTfOZdCW5F1fRa2q2M=">AAAEUHicbVNbb9MwGPXWAaPcNhBPvFhUSGOCqpkQ8II0aWSANmBU6zYpCZXjfmmtOk6wHWhl8mN4hX/DG/+EN3AuwJpiycrxOee75JMdppwp3ev9WFltrV24eGn9cvvK1WvXb2xs3jxRSSYpDGjCE3kWEgWcCRhopjmcpRJIHHI4Dad7hX76EaRiiTjW8xSCmIwFixgl2lLDjdvH3qzrx0RPZGymMM8D/AzPhhudXrdXLrwMnBp0UL2Ohputjj9KaBaD0JQTpTynl+rAEKkZ5ZC3/UxBSuiUjMGzUJAYVGDK/nN8zzIjHCXSbqFxyZ6PMCRWah6H1ll0qppaQf5P8zIdPQ0ME2mmQdCqUJRxrBNcDAOPmASq+dwCQiWzvWI6IZJQbUe2kMkdHLr9F33XPXgAGQc5lgDTwCgiqupt/w9st/3nYGcg4bU9vU1BEp1I4yud0AmHD7nxtWREjDlwiLQl/huwbfyUpaCs/XNucwr4RJM4JmJkfJCxpSdEmygf2nQw04qags3zRSdPVJEBOG8IM1VKnhNUpqHpODl+iOtD9H67maqKIDr3ds7HbHV27i/GFcxSrGRqWlVzsYfrZGXNoOF1bb9JPYTimpjydqrIuEt/t59XIiXc7DfFV3u1ai+2xQ314PCfanFDLbv9q/eLU9MBhKvaEoam39QF0ZlcsLzJc/usnOYjWgYnO13ncdd596izu1s/sHV0B91FW8hBT9AueomO0ABRZNAX9BV9a31v/Wz9WluprKv1F91CC2ut/Rs1p3zn</latexit>
T [x .key] = x
<latexit sha1_base64="/lv+jZ/czp8wt9MQa2b7CVUucnI=">AAAETnicbVNdb9MwFPXWAaN8beyRF4sKaUxQNRMCXpAmjQzQBoxq3SYloXLcm9aq4wTbgVUmv4VX+De88kd4Q+B8AGs6S5HOPefcj1zZYcqZ0r3ej6Xl1sqly1dWr7avXb9x89ba+u1jlWSSwoAmPJGnIVHAmYCBZprDaSqBxCGHk3C6W+gnH0EqlogjPUshiMlYsIhRoi01XNs48s66fkz0RMZmCrM8wM+Ga51et1cevAicGnRQfQ6H662OP0poFoPQlBOlPKeX6sAQqRnlkLf9TEFK6JSMwbNQkBhUYMrpc3zPMiMcJdJ+QuOSPZ9hSKzULA6ts5hTNbWCvEjzMh09DQwTaaZB0KpRlHGsE1ysAo+YBKr5zAJCJbOzYjohklBtFzZXyR0cuP0XfdfdfwAZBzmWANPAKCKq7m3/L2y3/edgdyDhtY3epiCJTqTxlU7ohMOH3PhaMiLGHDhE2hIXJmwZP2UpKGv/nNuaAj7RJI6JGBkfZGzpCdEmyoe2HJxpRU3B5vm8kyeqqACcN4QzVUqeE1Smoek4OX6I6yB6v9UsVWUQnXvb53M2O9v35/MKZiFXMjWturnYw3WxsmfQ8Lp23qReQnFNTHk3VWTchb/byyuREm72muKr3Vq119rihrp/8F+1uKGW0/7T+0XUdADhqraEoek3dUF0Jucsb/LcPiun+YgWwfF213ncdd496uzs1A9sFd1Bd9EmctATtINeokM0QBTN0Bf0FX1rfW/9bP1q/a6sy0t1zgaaOyurfwCxyn06</latexit>
T [x .key] =
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="F7Y7UzdV0Jldhl42cCgJN6Us54M=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1vxquDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AOyBd5s=</latexit>
O(m)
Direct-address table - Example 1
Universe
n = 4, with the 4 keys being: 2, 5, 8, 9
<latexit sha1_base64="fP5q0jgl+1dh5KupmXVf422IU8E=">AAAETnicbVNbb9MwGPXWAaXcNvbIi0WFNKYyNRPi8lZpZIA2YFR0m9SEynG/tFYdJ9gOrDL5LbzCv+GVP8IbAucCrOksRTo+53yXfMkXJJwp3e3+WFltrF26fKV5tXXt+o2bt9Y3bh+rOJUUBjTmsTwNiALOBAw00xxOEwkkCjicBLO9XD/5CFKxWLzT8wT8iEwECxkl2lKj9U3PdDvY6WCPj2OtOvipl43W292dbnHwMnAq0EbVORptNNreOKZpBEJTTpQaOt1E+4ZIzSiHrOWlChJCZ2QCQwsFiUD5pug+w/csM8ZhLO0jNC7Y8xGGRErNo8A6I6Knqq7l5EXaMNXhE98wkaQaBC0LhSnHOsb5KPCYSaCazy0gVDLbK6ZTIgnVdmALmdzBodt/3nfdgw6kHOREAsx8o4goq7e8v7DV8p6BnYGEV/b2JgFJdCyNp3RMpxw+ZMbTkhEx4cAh1Ja4MGDbeAlLQFn758zmFPCJxlFExNh4ICNLT4k2YTay6eBMK2pyNssWnTxWeQbgvCacqUIaOn5pGpm2k+EHuLqE77frqcoIorPh7vmYrfbu/cW4nFmKlUzNymouHuIqWVHTr3ld229cDSH/TYxXfNfQuEtvt5+VIiXc7NfFl3uVKiNjcU09OPyvWlxTi27/6f38VncA4aqyBIHp13VBdCoXLK+zfK2c+hItg+PdHefRjvP2YbvXqxasie6gu2gLOegx6qEX6AgNEEVz9AV9Rd8a3xs/G78av0vr6koVs4kWzlrzD8vDe7U=</latexit>
{0, 1, . . . , 9}
\\
\\
\\
0 1 2 3 4 5 6 7 8 9
value stored in slot 2
value stored in slot 5
value stored in slot 8
value stored in slot 9
Direct-address table - Example 2
Universe where we have only n keys<latexit sha1_base64="gdWW17rsX4HyGHXppaWlAI0HqIM=">AAAEVnicbVNdb9MwFPXWjo3ysQ4e92JRIY2pm5pqAh4rjQzQBoyKbpOarHLcmzaq4wTbgVUmD/waXuHfwJ9BOB/Ams5SpONzzr3Xvs71YhZI1en8Wlmt1ddurW/cbty5e+/+ZnPrwZmMEkFhQCMWiQuPSGABh4EKFIOLWAAJPQbn3uww088/gZBBxD+oeQxuSCY88ANKlKFGzW1H404bW23ssHGkZBt3LzXfs1LspKNmq7PfyRdeBlYJWqhcp6OtWssZRzQJgSvKiJRDqxMrVxOhAsogbTiJhJjQGZnA0EBOQpCuzm+R4seGGWM/EubjCufs9QhNQinnoWecIVFTWdUy8iZtmCj/uasDHicKOC0K+QnDKsJZS/A4EEAVmxtAqAjMWTGdEkGoMo1byGQPTuz+y75tH7chYSAmAmDmakl4Ub3h/IWNhvMCTA8EvDG7dzEIoiKhHakiOmXwMdWOEgHhEwYMfGWIGwN2tRMHMUhj/5KanBw+0ygMCR9rB0Ro6ClR2k9HJh1cKUl1xqbpopNFMssAjFWEK5lLQ8stTCPdMi+/h8uNf7lbTVVEEJUOu9djdlrdJ4txGbMUKwI5K6rZeIjLZHlNt+K1zXmjsgnZb6Kd/F19bS/d7igtREqYPqqKrw9LVYTa4Ip6fPJfNbii5qf9p/ezXdUBhMnS4nm6X9U5UYlYsLxNs7GyqkO0DM66+9bT/YP3B61erxywDbSNHqEdZKFnqIdeoVM0QBR9Rd/Qd/Sj9rP2u75WXy+sqytlzEO0sOrNPwBsfGU=</latexit>
{0, 1, . . . , 2n�1}
\
\
\
\
. . . .
\
<latexit sha1_base64="gXfSveA6IYmV0cKVTvcCmoid5S4=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTTUBj5VGBmgDRqHbpCZUjnvSWnWcYDtjlclP4BX+Df+Dd94QrzzjXIA1naVIn7/LOSdOHKaMStXpfF9ZtS5cvHR57Urr6rXrN26ub9w6lEkmCAxIwhJxHGIJjHIYKKoYHKcCcBwyOApnO4V+dAJC0oS/U/MUghhPOI0owcpQb09G7mjd6bQ75bKXgVsDB9XrYLRhOf44IVkMXBGGpRy6nVQFGgtFCYO85WcSUkxmeAJDAzmOQQa6nDW37xlmbEeJMA9XdsmeTWgcSzmPQ+OMsZrKplaQ52nDTEVPAk15mingpGoUZcxWiV28uD2mAohicwMwEdTMapMpFpgoczwLlbzBvtd/1ve8vQeQMRATATALtMS86t7y/8JWy38K5gwEvDS71ykIrBKhfakSMmXwIde+EhTzCQMGkTLEuYEt7ac0BWnsn3JTk8NHksQx5mPtg4gNPcVKR/nIlINTJYku2DxfdLJEFhWAsYZwKktp6AaVaaQdN7cf2vUmer/VLFUlsMqH3bOZTad7fzFXMEtZQeWs6ubZQ7suVvYMGl7PzJvUh1D8Jtovv2ukvaW3280rkWCmd5vii51aFbE2uKHu7f9XDW6o5bT/9H6xazoAM1lbwlD3mzrHKhMLlld5bq6V27xEy+Cw23YftbffbDu9Xn3B1tAddBdtIhc9Rj30HB2gASJogj6jL+ir9c36Yf20flXW1ZU6cxstLOv3H4S2dzw=</latexit>v1
<latexit sha1_base64="vvMUx9ok2ml0dA6uXrWW3F8B7DY=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTTUBj5VGBmgDRqHbpCZUjnvSWnWcYDtjlclP4BX+Df+Dd94QrzzjXIA1naVIn7/LOSdOHKaMStXpfF9ZtS5cvHR57Urr6rXrN26ub9w6lEkmCAxIwhJxHGIJjHIYKKoYHKcCcBwyOApnO4V+dAJC0oS/U/MUghhPOI0owcpQb09G3dG602l3ymUvA7cGDqrXwWjDcvxxQrIYuCIMSzl0O6kKNBaKEgZ5y88kpJjM8ASGBnIcgwx0OWtu3zPM2I4SYR6u7JI9m9A4lnIeh8YZYzWVTa0gz9OGmYqeBJryNFPASdUoypitErt4cXtMBRDF5gZgIqiZ1SZTLDBR5ngWKnmDfa//rO95ew8gYyAmAmAWaIl51b3l/4Wtlv8UzBkIeGl2r1MQWCVC+1IlZMrgQ659JSjmEwYMImWIcwNb2k9pCtLYP+WmJoePJIljzMfaBxEbeoqVjvKRKQenShJdsHm+6GSJLCoAYw3hVJbS0A0q00g7bm4/tOtN9H6rWapKYJUPu2czm073/mKuYJaygspZ1c2zh3ZdrOwZNLyemTepD6H4TbRfftdIe0tvt5tXIsFM7zbFFzu1KmJtcEPd2/+vGtxQy2n/6f1i13QAZrK2hKHuN3WOVSYWLK/y3Fwrt3mJlsFht+0+am+/2XZ6vfqCraE76C7aRC56jHroOTpAA0TQBH1GX9BX65v1w/pp/aqsqyt15jZaWNbvP4iMdz0=</latexit>v2
. . . .
. . . .
What fraction of space is being utilized?
Direct-address table - Example 2
Universe where we have only n keys<latexit sha1_base64="gdWW17rsX4HyGHXppaWlAI0HqIM=">AAAEVnicbVNdb9MwFPXWjo3ysQ4e92JRIY2pm5pqAh4rjQzQBoyKbpOarHLcmzaq4wTbgVUmD/waXuHfwJ9BOB/Ams5SpONzzr3Xvs71YhZI1en8Wlmt1ddurW/cbty5e+/+ZnPrwZmMEkFhQCMWiQuPSGABh4EKFIOLWAAJPQbn3uww088/gZBBxD+oeQxuSCY88ANKlKFGzW1H404bW23ssHGkZBt3LzXfs1LspKNmq7PfyRdeBlYJWqhcp6OtWssZRzQJgSvKiJRDqxMrVxOhAsogbTiJhJjQGZnA0EBOQpCuzm+R4seGGWM/EubjCufs9QhNQinnoWecIVFTWdUy8iZtmCj/uasDHicKOC0K+QnDKsJZS/A4EEAVmxtAqAjMWTGdEkGoMo1byGQPTuz+y75tH7chYSAmAmDmakl4Ub3h/IWNhvMCTA8EvDG7dzEIoiKhHakiOmXwMdWOEgHhEwYMfGWIGwN2tRMHMUhj/5KanBw+0ygMCR9rB0Ro6ClR2k9HJh1cKUl1xqbpopNFMssAjFWEK5lLQ8stTCPdMi+/h8uNf7lbTVVEEJUOu9djdlrdJ4txGbMUKwI5K6rZeIjLZHlNt+K1zXmjsgnZb6Kd/F19bS/d7igtREqYPqqKrw9LVYTa4Ip6fPJfNbii5qf9p/ezXdUBhMnS4nm6X9U5UYlYsLxNs7GyqkO0DM66+9bT/YP3B61erxywDbSNHqEdZKFnqIdeoVM0QBR9Rd/Qd/Sj9rP2u75WXy+sqytlzEO0sOrNPwBsfGU=</latexit>
{0, 1, . . . , 2n�1}
\
\
\
\
. . . .
\
<latexit sha1_base64="gXfSveA6IYmV0cKVTvcCmoid5S4=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTTUBj5VGBmgDRqHbpCZUjnvSWnWcYDtjlclP4BX+Df+Dd94QrzzjXIA1naVIn7/LOSdOHKaMStXpfF9ZtS5cvHR57Urr6rXrN26ub9w6lEkmCAxIwhJxHGIJjHIYKKoYHKcCcBwyOApnO4V+dAJC0oS/U/MUghhPOI0owcpQb09G7mjd6bQ75bKXgVsDB9XrYLRhOf44IVkMXBGGpRy6nVQFGgtFCYO85WcSUkxmeAJDAzmOQQa6nDW37xlmbEeJMA9XdsmeTWgcSzmPQ+OMsZrKplaQ52nDTEVPAk15mingpGoUZcxWiV28uD2mAohicwMwEdTMapMpFpgoczwLlbzBvtd/1ve8vQeQMRATATALtMS86t7y/8JWy38K5gwEvDS71ykIrBKhfakSMmXwIde+EhTzCQMGkTLEuYEt7ac0BWnsn3JTk8NHksQx5mPtg4gNPcVKR/nIlINTJYku2DxfdLJEFhWAsYZwKktp6AaVaaQdN7cf2vUmer/VLFUlsMqH3bOZTad7fzFXMEtZQeWs6ubZQ7suVvYMGl7PzJvUh1D8Jtovv2ukvaW3280rkWCmd5vii51aFbE2uKHu7f9XDW6o5bT/9H6xazoAM1lbwlD3mzrHKhMLlld5bq6V27xEy+Cw23YftbffbDu9Xn3B1tAddBdtIhc9Rj30HB2gASJogj6jL+ir9c36Yf20flXW1ZU6cxstLOv3H4S2dzw=</latexit>v1
<latexit sha1_base64="vvMUx9ok2ml0dA6uXrWW3F8B7DY=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTTUBj5VGBmgDRqHbpCZUjnvSWnWcYDtjlclP4BX+Df+Dd94QrzzjXIA1naVIn7/LOSdOHKaMStXpfF9ZtS5cvHR57Urr6rXrN26ub9w6lEkmCAxIwhJxHGIJjHIYKKoYHKcCcBwyOApnO4V+dAJC0oS/U/MUghhPOI0owcpQb09G3dG602l3ymUvA7cGDqrXwWjDcvxxQrIYuCIMSzl0O6kKNBaKEgZ5y88kpJjM8ASGBnIcgwx0OWtu3zPM2I4SYR6u7JI9m9A4lnIeh8YZYzWVTa0gz9OGmYqeBJryNFPASdUoypitErt4cXtMBRDF5gZgIqiZ1SZTLDBR5ngWKnmDfa//rO95ew8gYyAmAmAWaIl51b3l/4Wtlv8UzBkIeGl2r1MQWCVC+1IlZMrgQ659JSjmEwYMImWIcwNb2k9pCtLYP+WmJoePJIljzMfaBxEbeoqVjvKRKQenShJdsHm+6GSJLCoAYw3hVJbS0A0q00g7bm4/tOtN9H6rWapKYJUPu2czm073/mKuYJaygspZ1c2zh3ZdrOwZNLyemTepD6H4TbRfftdIe0tvt5tXIsFM7zbFFzu1KmJtcEPd2/+vGtxQy2n/6f1i13QAZrK2hKHuN3WOVSYWLK/y3Fwrt3mJlsFht+0+am+/2XZ6vfqCraE76C7aRC56jHroOTpAA0TQBH1GX9BX65v1w/pp/aqsqyt15jZaWNbvP4iMdz0=</latexit>v2
. . . .
. . . .
What fraction of space is being utilized?
Storing n keys in space
Utilization:
<latexit sha1_base64="SPyPa7q/F/J0ngHK8tf7gh4H6+U=">AAAEPHicdVNbb9MwFPYWLqPcNnjkJaJCGhNUSWlhfZs0MkAbMArdJjVZ5bgnbVTHCbYDm0x+Aq/wb/gfvPOGeOUZ5zJYs2Ep0ufvcs6JE/sJDYW0rO8Li8aFi5cuL11pXL12/cbN5ZVbeyJOOYEBiWnMD3wsgIYMBjKUFA4SDjjyKez7s81c3/8AXIQxeyePE/AiPGFhEBIsNfW2fchGy02rZXV7XdsyrVbXsnuPctDrrXe6XdNuWcVqomrtjlaMpjuOSRoBk4RiIYa2lUhPYS5DQiFruKmABJMZnsBQQ4YjEJ4qZs3Me5oZm0HM9cOkWbCnEwpHQhxHvnZGWE5FXcvJ87RhKoN1T4UsSSUwUjYKUmrK2Mxf3ByHHIikxxpgwkM9q0mmmGMi9fHMVXIGO07/Wd9xth9ASoFPOMDMUwKzsnvDPYGNhvsU9BlweKl3rxPgWMZcuULGZErhfaZcyUPMJhQoBFIT5wbWlJuECQht/5Tpmgw+kjiKMBsrF3ik6SmWKshGuhwcSUFUzmbZvJPGIq8AlNaEI1FIQ9srTSPVtDPzoVltgsO1eqkygWU2bJ/OrDbb9+dzOXMmy0MxK7s55tCsihU9vZrX0fPG1SHkv4lyi+8aKOfM221lpUgwVVt18cVmpfJIaVxTt3f+qRrX1GLav3o/39UdgKmoLL6v+nWdYZnyOcurLNPX6uTumP8He+2W/bjVedNpbmxUF2wJ3UF30Sqy0RO0gZ6jXTRABE3QZ/QFfTW+GT+Mn8av0rq4UGVuo7ll/P4DitV3gg==</latexit>
2n
<latexit sha1_base64="mpWtJEZrhb00wFzbV6Uz6yJ9dbY=">AAAEUnicdVNPb9MwFPfWAqMMtsGBAxeLCmlMUCVlhfU2aWSANmBUdJvUdJXrvrRRHSfYDmwy/jRc4dtw4atwwkkzWLNhKdLPvz/vOS/xMGGhVI7za2GxUr12/cbSzdqt5dt3VlbX7h7KOBUUujRmsTgeEgks5NBVoWJwnAgg0ZDB0XC6k+lHn0HIMOYf1VkC/YiMeRiElChLDVbv+4EgVHOjmyfcYJ8kiYhPsTNYrTsNp9VuuQ52Gi3HbT/LQLu9tdlqYbfh5KuOinUwWKvU/VFM0wi4ooxI2XOdRPU1ESqkDEzNTyUkhE7JGHoWchKB7Ov8DQx+ZJkRDmJhH65wzl5MaBJJeRYNrTMiaiLLWkZepfVSFWz1dciTVAGns0ZByrCKcTYOPAoFUMXOLCBUhPasmE6IHYmyQ5ur5HX3vc6rjuftPYGUgRgLgGlfS8Jn3Wv+OazV/JdgZyDgrd29T0AQFQvtSxXTCYNPRvtKhISPGTAIlCWuDGxoPwkTkNb+1diaHL7QOIoIH2kfRGTpCVE6MANbDk6VpDpjjZl3slhmFYCxknAqc6nn9memga67Bj/FxSY42SiXmiWIMr3mxcx6vfl4Ppcxl7IilNNZNw/3cFEs79kveT173rgYQvabaD//roH2Lr3drpmJlDC9Wxbf7BSqiLTFJXVv/59qcUnNT/tX72S7sgMIk4VlONSdss6JSsWc5Z0x9lqd3x38f3DYbLjPG5sfNuvb28UFW0IP0EO0jlz0Am2j1+gAdRFFBn1D39GPys/K7+pCtTKzLi4UmXtoblWX/wApuX06</latexit> n
2n⇡ 0
Hash tablesWhat if the universe is massive, but the set of keys that will actually be used is much smaller? ( )
Then a direct-address table is really wasteful. Most entries of T will never be used!
Idea: Although is massive, we’ll use a table of size m. How? We use a hash function
<latexit sha1_base64="cPgXYfImooD/GPym9f/hNK4b8Ao=">AAAEOnicbVPLbtQwFHUbHmV4tbBkExEhlQpGkxECFiwqlRRQC7Qjpq2UpCPHczNjjeME24FWJl/AFv6GH2HLDrHlA3AeQCdTS5GOz+PeGyeOMkal6vW+Ly1bFy5eurxypXP12vUbN1fXbh3INBcEhiRlqTiKsARGOQwVVQyOMgE4iRgcRrOtUj/8AELSlL9TpxmECZ5wGlOClaH2h6NVp9ftVcteBG4DHNSsvdGa5QTjlOQJcEUYltJ3e5kKNRaKEgZFJ8glZJjM8AR8AzlOQIa6mrSw7xlmbMepMA9XdsWeTWicSHmaRMaZYDWVba0kz9P8XMVPQ015livgpG4U58xWqV2+tj2mAohipwZgIqiZ1SZTLDBR5nDmKnnDXW/wYuB5Ow8gZyAmAmAWaol53b0T/IWdTvAczBkIeG12bzMQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwMbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQcnShJdskUx72SpLCsAYy3hRFaS74a1aaQdt7Af2s0mPt5ol6oTWBV+/2xm3enfn8+VzEJWUDmru3m2bzfFqp5hy+uZedPmEMrfRAfVd421t/B220UtEsz0dlt8tdWoItEGt9Sd3f+qwS21mvafPih3bQdgJhtLFOlBW+dY5WLO8qYozLVy25doERz0u+7jrrv/yNl81lywFXQH3UXryEVP0CZ6ifbQEBEE6DP6gr5a36wf1k/rV21dXmoyt9Hcsn7/AYuwdnA=</latexit>
U
<latexit sha1_base64="hU4zpyJneuyb/ig53MS+yeG0a3A=">AAAEOnicbVPLbtQwFHUbHmV4tbBkExEhlQpGkxECFiwqlRRQC7Qjpq2UpCPHczNjjeME24FWJl/AFv6GH2HLDrHlA3AeQCdTS5GOz+PeGyeOMkal6vW+Ly1bFy5eurxypXP12vUbN1fXbh3INBcEhiRlqTiKsARGOQwVVQyOMgE4iRgcRrOtUj/8AELSlL9TpxmECZ5wGlOClaH2p6NVp9ftVcteBG4DHNSsvdGa5QTjlOQJcEUYltJ3e5kKNRaKEgZFJ8glZJjM8AR8AzlOQIa6mrSw7xlmbMepMA9XdsWeTWicSHmaRMaZYDWVba0kz9P8XMVPQ015livgpG4U58xWqV2+tj2mAohipwZgIqiZ1SZTLDBR5nDmKnnDXW/wYuB5Ow8gZyAmAmAWaol53b0T/IWdTvAczBkIeG12bzMQWKVCB1KlZMrgfaEDJSjmEwYMYmWIcwMbOshoBtLYPxWmJoePJE0SzMc6AJEYeoqVjouRKQcnShJdskUx72SpLCsAYy3hRFaS74a1aaQdt7Af2s0mPt5ol6oTWBV+/2xm3enfn8+VzEJWUDmru3m2bzfFqp5hy+uZedPmEMrfRAfVd421t/B220UtEsz0dlt8tdWoItEGt9Sd3f+qwS21mvafPih3bQdgJhtLFOlBW+dY5WLO8qYozLVy25doERz0u+7jrrv/yNl81lywFXQH3UXryEVP0CZ6ifbQEBEE6DP6gr5a36wf1k/rV21dXmoyt9Hcsn7/AdSSdoM=</latexit>
h <latexit sha1_base64="eLyDKXfLiq//UeSvmmHqHKK2CRc=">AAAEUnicbVNNb9MwGPbWAqMM6ODAgYtFhTSmbmomBBw4TBoZoA0YFd0mNaFy3DetVccJtgOrTH4NV/g3XPgrnHA+gDWdpUiPn4/3dd7EQcKZ0r3er5XVRvPK1Wtr11s31m/eut3euHOi4lRSGNCYx/IsIAo4EzDQTHM4SySQKOBwGsz2c/30M0jFYvFBzxPwIzIRLGSUaEuN2vc8g3td7HSxx8exVl0cbTvYy0btTm+nVyy8DJwKdFC1jkcbjY43jmkagdCUE6WGTi/RviFSM8oha3mpgoTQGZnA0EJBIlC+Kd4gww8tM8ZhLO0jNC7YiwlDIqXmUWCdEdFTVddy8jJtmOrwmW+YSFINgpaNwpRjHeN8HHjMJFDN5xYQKpk9K6ZTIgnVdmgLldzBkdt/2Xfdwy6kHOREAsx8o4gou7e8v7DV8l6AnYGEN3b3LgFJdCyNp3RMpxw+ZcbTkhEx4cAh1Ja4NLBlvIQloKz9a2ZrCvhC4ygiYmw8kJGlp0SbMBvZcnCuFTU5m2WLTh6rvAJwXhPOVSENHb80jUzHyfA2rjbhx616qTJBdDbcvZjZ7Ow+WszlzFJWMjUru7l4iKtiRU+/5nXteeNqCPlvYrziu4bGXXq7g6wUKeHmoC6+3q9UGRmLa+rh0X/V4ppanPaf3s93dQcQripLEJh+XRdEp3LB8jbLr5VTv0TL4GR3x3my47x/3Nl7Xl2wNXQfPUCbyEFP0R56hY7RAFGUoW/oO/rR+Nn43VxpNkrr6kqVuYsWVnP9D170eq0=</latexit>
{0, 1, . . . ,m � 1}
<latexit sha1_base64="zih5XZc/motLMeMpKxqQkVo7Byk=">AAAEY3icbVPrbtMwFPa2AqPjsg3+ISSLCmlMXdVMCBC/Jo0M0AaMim6Tmqxy3JPWqhMH22GbTF6Bp+EvvAcPwHvgXIA1naVIn7/LOc5JHCScKd3t/lpYXGpcu35j+WZz5dbtO3dX19aPlEglhT4VXMiTgCjgLIa+ZprDSSKBRAGH42C6m+vHX0AqJuJP+iIBPyLjmIWMEm2p4erGBL/EfexJNp5oIqU4w57ptrHTxh4fCa3aONpysJcNV1vdTrdYeB44FWihah0O15Za3kjQNIJYU06UGjjdRPuGSM0oh6zppQoSQqdkDAMLYxKB8k3xShl+bJkRDoW0T6xxwV5OGBIpdREF1hkRPVF1LSev0gapDl/4hsVJqiGmZaMw5VgLnM8Hj5gEqvmFBYRKZs+K6YRIQrWd4kwlt3/g9l73XHe/DSkHOZYAU98oEpfdm95f2Gx6r8DOQMI7u/uQgCRaSOMpLeiEw+fMeFoyEo85cAi1Ja4MbBovYQkoa/+a2ZoxnFERRSQeGQ9kZOkJ0SbMhrYcnGtFTc5m2ayTC5VXAM5rwrkqpIHjl6ahaTkZ3sLVJjzdrJcqE0Rng+3LmY3W9pPZXM7MZSVT07Kbiwe4Klb09Gte155XVEPIfxPjFd81NO7c2+1lpUgJN3t18e1upcrIWFxT9w/+qxbX1OK0//Revqs7gHBVWYLA9Op6THQqZyzvs/xaOfVLNA+OtjvOs47z8WlrZ6e6YMvoAXqENpCDnqMd9AYdoj6i6Bv6jn6gn0u/GyuN9cb90rq4UGXuoZnVePgHhEaAWA==</latexit>
h : U ! {0, 1, . . . ,m � 1}
<latexit sha1_base64="j0Ii+7K4lnfcLyTwmmCbVLikulo=">AAAEQnicbVPbbtMwGPYWDqOcNrjkxqJCGhNUzYSAy0kjA7QBo6LbUJNVjvunteo4wXZgk5un4BbehpfgFbhD3HKBcwDWdJYiff4O///HicOUM6W73e9Ly86Fi5cur1xpXb12/cbN1bVbByrJJIU+TXgij0KigDMBfc00h6NUAolDDofhdLvQDz+CVCwR7/RpCkFMxoJFjBJtqfcC+5zjWX82XG13O91y4UXg1qCN6rU/XHPa/iihWQxCU06UGrjdVAeGSM0oh7zlZwpSQqdkDAMLBYlBBaacOMf3LDPCUSLtIzQu2bMJQ2KlTuPQOmOiJ6qpFeR52iDT0dPAMJFmGgStGkUZxzrBxevjEZNANT+1gFDJ7KyYTogkVNtDmqvk9fe83vOe5+0+gIyDHEuAaWAUEVX3lv8Xtlr+M7BnIOGV3b1JQRKdSOMrndAJhw+58bVkRIw5cIi0Jc4NbBg/ZSkoa5/ltqaATzSJYyJGxgcZW3pCtInyoS0HJ1pRU7B5Pu/kiSoqAOcN4USV0sANKtPQtN0cP8T1JjreaJaqEkTng82zmfX25v35XMEsZCVT06qbhwe4Llb2DBpez86b1IdQ/CbGL79rZLyFt9vJK5ESbnaa4svtWpWxsbih7u79Vy1uqOW0//ResWs6gHBVW8LQ9Jq6IDqTc5bXeW6vldu8RIvgYLPjPu64bx+1t7bqC7aC7qC7aB256AnaQi/QPuojimL0GX1BX51vzg/np/Orsi4v1ZnbaG45v/8Aw615ng==</latexit>
n ⌧ |U|
<latexit sha1_base64="l7CjNVWCxBTK0Lq3RQo3/jkzj2w=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTYWAx0ojA7QBo9BtUpNVjnvSWnWcYDuwyc1P4BX+Df+Dd94QrzzjXIA1naVIn7/LOSdOHKaMStXpfF9ZtS5cvHR57Urr6rXrN26ub9w6kEkmCAxIwhJxFGIJjHIYKKoYHKUCcBwyOAxn24V++BGEpAl/r05TCGI84TSiBCtDvZsP5qN1p9PulMteBm4NHFSv/dGG5fjjhGQxcEUYlnLodlIVaCwUJQzylp9JSDGZ4QkMDeQ4BhnoctbcvmeYsR0lwjxc2SV7NqFxLOVpHBpnjNVUNrWCPE8bZip6GmjK00wBJ1WjKGO2Suzixe0xFUAUOzUAE0HNrDaZYoGJMsezUMkb7Hn9533P230AGQMxEQCzQEvMq+4t/y9stfxnYM5AwCuze5OCwCoR2pcqIVMGH3LtK0ExnzBgEClDnBvY0n5KU5DGPs9NTQ6fSBLHmI+1DyI29BQrHeUjUw5OlCS6YPN80ckSWVQAxhrCiSyloRtUppF23Nx+aNeb6HirWapKYJUPu2czm073/mKuYJaygspZ1c2zh3ZdrOwZNLyemTepD6H4TbRfftdIe0tvt5NXIsFM7zTFl9u1KmJtcEPd3fuvGtxQy2n/6f1i13QAZrK2hKHuN3WOVSYWLK/z3Fwrt3mJlsFBt+0+brtvHzm9Xn3B1tAddBdtIhc9QT30Au2jASJogj6jL+ir9c36Yf20flXW1ZU6cxstLOv3H5Qrd4A=</latexit>
|U|
<latexit sha1_base64="wTr6Ym7ZxIxqm/aGaxma7m8lTho=">AAAEOnicdVPbbtMwGPYWDqOcNrjkxqJCGhNUSam2IXExaWSANmCr6DapySrH/dNadQ7YDmwyeQJu4W14EW65Q9zyADhNBms2LEX6/B3+/48TBylnUtn297l569LlK1cXrjWu37h56/bi0p19mWSCQo8mPBGHAZHAWQw9xRSHw1QAiQIOB8Fks9APPoCQLInfqZMU/IiMYhYySpSh9iaDxabderq+2u6sYrtl22tO2ylAe63zpIMdwxSriaq1O1iymt4woVkEsaKcSNl37FT5mgjFKIe84WUSUkInZAR9A2MSgfT1dNIcPzDMEIeJME+s8JQ9m9AkkvIkCowzImos61pBXqT1MxWu+5rFaaYgpmWjMONYJbh4bTxkAqjiJwYQKpiZFdMxEYQqczgzldzejtt90XXd7UeQcRAjATDxtSRx2b3hncJGw3sO5gwEvDa7tykIohKhPakSOubwPteeEozEIw4cQmWICwMr2ktZCtLYP+WmZgwfaRJFJB5qD0Rk6DFROswHphwcK0l1web5rJMnsqgAnNeEYzmV+o5fmga66eT4Ma424dFKvVSZICrvt89mlpvth7O5gjmXFUxOym4u7uOq2LSnX/O6Zt6kOoTiN9He9LuG2j33dlt5KVLC9VZdfLVZqSLSBtfU7Z1/qsE1dTrtX71b7OoOIFxWliDQ3boeE5WJGcubPDfX6vTu4P+D/XbLWW119jrNjWfVBVtA99B9tIwctIY20Eu0i3qIIkCf0Rf01fpm/bB+Wr9K6/xclbmLZpb1+w/aTHbL</latexit>
k
<latexit sha1_base64="VIrHJS15MZoYhCNjpwQ6T8LJVWs=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC6iaokmragatJIwO0AaOi26Qmqxz3T2vVOWA7sMnkFbiFt+E5eADuELfc4jQZrNmwFOnzd/j/P04cpJxJZdvf5+atK1evXV+40bh56/adu4tL9w5kkgkKPZrwRBwFRAJnMfQUUxyOUgEkCjgcBpPtQj/8AEKyJH6nTlPwIzKKWcgoUQU1bk2WB4tNu23btuM4uADO+pptwObmRsfZwE4hmdVE1dofLFlNb5jQLIJYUU6k7Dt2qnxNhGKUQ97wMgkpoRMygr6BMYlA+no6bI4fGWaIw0SYJ1Z4yp5PaBJJeRoFxhkRNZZ1rSAv0/qZCjd8zeI0UxDTslGYcawSXLw5HjIBVPFTAwgVzMyK6ZgIQpU5n5lKbm/P7T7vuu7uY8g4iJEAmPhakrjs3vDOYKPhPQNzBgJemd2bFARRidCeVAkdc3ifa08JRuIRBw6hMsSlgRXtpSwFaeyfclMzho80iSISD7UHIjL0mCgd5gNTDk6UpLpg83zWyRNZVADOa8KJnEp9xy9NA910cvwEV5vweKVeqkwQlfc75zOtZmd5NlcwF7KCyUnZzcV9XBWb9vRrXtfMm1SHUPwm2pt+11C7F95uJy9FSrjeqYsvtytVRNrgmrq79081uKZOp/2rd4td3QGEy8oSBLpb12OiMjFjeZ3n5lqd3R38f3DQaTtr7dW3q82tp9UFW0AP0EPUQg5aR1voBdpHPUTRGH1GX9BX65v1w/pp/Sqt83NV5j6aWdbvP+gvd5Q=</latexit>
h(k)
Hash function and collisions
Let be a hash function.
Given key k, we call h(k) the hash value of key k
(not-so-smart) Example:
If two keys hash to the same slot, then we have a collision
<latexit sha1_base64="zih5XZc/motLMeMpKxqQkVo7Byk=">AAAEY3icbVPrbtMwFPa2AqPjsg3+ISSLCmlMXdVMCBC/Jo0M0AaMim6Tmqxy3JPWqhMH22GbTF6Bp+EvvAcPwHvgXIA1naVIn7/LOc5JHCScKd3t/lpYXGpcu35j+WZz5dbtO3dX19aPlEglhT4VXMiTgCjgLIa+ZprDSSKBRAGH42C6m+vHX0AqJuJP+iIBPyLjmIWMEm2p4erGBL/EfexJNp5oIqU4w57ptrHTxh4fCa3aONpysJcNV1vdTrdYeB44FWihah0O15Za3kjQNIJYU06UGjjdRPuGSM0oh6zppQoSQqdkDAMLYxKB8k3xShl+bJkRDoW0T6xxwV5OGBIpdREF1hkRPVF1LSev0gapDl/4hsVJqiGmZaMw5VgLnM8Hj5gEqvmFBYRKZs+K6YRIQrWd4kwlt3/g9l73XHe/DSkHOZYAU98oEpfdm95f2Gx6r8DOQMI7u/uQgCRaSOMpLeiEw+fMeFoyEo85cAi1Ja4MbBovYQkoa/+a2ZoxnFERRSQeGQ9kZOkJ0SbMhrYcnGtFTc5m2ayTC5VXAM5rwrkqpIHjl6ahaTkZ3sLVJjzdrJcqE0Rng+3LmY3W9pPZXM7MZSVT07Kbiwe4Klb09Gte155XVEPIfxPjFd81NO7c2+1lpUgJN3t18e1upcrIWFxT9w/+qxbX1OK0//Revqs7gHBVWYLA9Op6THQqZyzvs/xaOfVLNA+OtjvOs47z8WlrZ6e6YMvoAXqENpCDnqMd9AYdoj6i6Bv6jn6gn0u/GyuN9cb90rq4UGXuoZnVePgHhEaAWA==</latexit>
h : U ! {0, 1, . . . ,m � 1}
<latexit sha1_base64="BeHDyhIzzDbxzhDwME2/JjAZcLA=">AAAETHicdVNdb9MwFPXWMUb56uCRF4sKaZugSjr29YA0aWSANmBUdJvUhMpxb9qojhNsh20y+Sm8wr/hnf/BG0LCaTJYs2Ep0vE5537kJtdPWCiVZf2Yma3NXZu/vnCjfvPW7Tt3G4v3DmWcCgpdGrNYHPtEAgs5dFWoGBwnAkjkMzjyxzu5fvQJhAxj/l6dJeBFZMjDIKREGarfWBwtjZfxMzzGrh/FA2xb/UbTalnra1urFrZaa5a9sbVlgGWtb662sW1AfpqoPAf9xVrTHcQ0jYAryoiUPdtKlKeJUCFlkNXdVEJC6JgMoWcgJxFIT096z/AjwwxwEAvzcIUn7MUITSIpzyLfOCOiRrKq5eRVWi9VwaanQ56kCjgtCgUpwyrG+SDwIBRAFTszgFARml4xHRFBqDLjmsrkdPedzouO4+w9hpSBGAqAsacl4UX1unsO63X3OZgZCHhtbm8TEETFQrtSxXTE4GOmXSVCwocMGATKEFcGrGg3CROQxv45Mzk5nNA4iggfaBdEZOgRUTrI+iYdnCpJdc5m2bSTxTLPAIxVhFM5kXq2V5j6umln+AkuL8GHlWqqIoKorNe+GLPUbC9Px+XMpVgRynFRzcE9XCab1PQqXsf0G5dDyH8T7U6+a6CdS2+3mxUiJUzvVsVXO6UqIm1wRd3b/6caXFEn3f7VO/mt6gDCZGnxfd2p6pyoVExZ3mSZWavz3cH/B4ftlr3est89bW5vlwu2gB6gh2gJ2WgDbaOX6AB1EUUn6Av6ir7Vvtd+1n7VfhfW2Zky5j6aOnPzfwCbc3rl</latexit>
h(k) = k mod 10
What if the key is not a natural number?
Suppose the key is a floating point number
• Easy to fix by rescaling
How to handle strings?
• Basic idea: interpret as number in given base and convert to decimal (more on this in a later lecture; stay tuned!)
Handling collisions
How can we handle collisions?
(1) Design a hash function which makes collisions as unlikely as possible (more on this soon)
Handling collisions
How can we handle collisions?
(1) Design a hash function which makes collisions as unlikely as possible (more on this soon)
OK… but what if a collision still happens? How can we handle collisions?
(2) Chaining - let each hash table slot store a linked list
(3) Open addressing - if the desired entry is already full, then try some other slots (using some fixed order; more on this next class)
ChainingIn chaining, we store all elements that hash to the same slot j within a linked list
Example:
(again, not good hash function!)
Insert these keys in this order: 17, 4, 7, 34, 1, 41, 21, 31
0 1 2 3 4 5 6 7 8 9
<latexit sha1_base64="3tMqsiZSF69+UbplZtkvXq0Oc6w=">AAAETHicbVNdb9MwFPXWMUb52AaPvFhUSGOCqakQ8DhpZIA2YFTrNikJlePetKaOE2yHbTL5KbzCv+Gd/8EbQsL5ANZ0liIdn3PuR25yw5QzpbvdHwuLraUry1dXrrWv37h5a3Vt/faRSjJJYUATnsiTkCjgTMBAM83hJJVA4pDDcTjdKfTjTyAVS8ShPk8hiMlYsIhRoi01XFs/xH7IxtzDH0ogg+Fap7vVLQ+eB04NOqg+B8P1VscfJTSLQWjKiVKe0011YIjUjHLI236mICV0SsbgWShIDCowZe85vm+ZEY4SaR+hcclejDAkVuo8Dq0zJnqimlpBXqZ5mY6eBYaJNNMgaFUoyjjWCS4GgUdMAtX83AJCJbO9YjohklBtxzWTyR3su/0XfdfdewgZBzmWANPAKCKq6m3/L2y3/edgZyDhtb29TUESnUjjK53QCYePufG1ZESMOXCItCUuDdg0fspSUNb+Obc5BZzSJI6JGBkfZGzpCdEmyoc2HZxpRU3B5vmskyeqyACcN4QzVUqeE1Smoek4OX6E60v0frOZqoogOvd6F2M2Or0Hs3EFMxcrmZpW1Vzs4TpZWTNoeF3bb1IPofhNjF9+18i4c2+3m1ciJdzsNsVXO7UqY2NxQ93b/69a3FDLbv/p/eLWdADhqraEoek3dUF0Jmcsb/LcrpXTXKJ5cNTbcp5sOe8ed7a36wVbQXfRPbSBHPQUbaOX6AANEEWn6Av6ir61vrd+tn61flfWxYU65g6aOUvLfwDzrHvB</latexit>
T⇥j⇤
<latexit sha1_base64="BeHDyhIzzDbxzhDwME2/JjAZcLA=">AAAETHicdVNdb9MwFPXWMUb56uCRF4sKaZugSjr29YA0aWSANmBUdJvUhMpxb9qojhNsh20y+Sm8wr/hnf/BG0LCaTJYs2Ep0vE5537kJtdPWCiVZf2Yma3NXZu/vnCjfvPW7Tt3G4v3DmWcCgpdGrNYHPtEAgs5dFWoGBwnAkjkMzjyxzu5fvQJhAxj/l6dJeBFZMjDIKREGarfWBwtjZfxMzzGrh/FA2xb/UbTalnra1urFrZaa5a9sbVlgGWtb662sW1AfpqoPAf9xVrTHcQ0jYAryoiUPdtKlKeJUCFlkNXdVEJC6JgMoWcgJxFIT096z/AjwwxwEAvzcIUn7MUITSIpzyLfOCOiRrKq5eRVWi9VwaanQ56kCjgtCgUpwyrG+SDwIBRAFTszgFARml4xHRFBqDLjmsrkdPedzouO4+w9hpSBGAqAsacl4UX1unsO63X3OZgZCHhtbm8TEETFQrtSxXTE4GOmXSVCwocMGATKEFcGrGg3CROQxv45Mzk5nNA4iggfaBdEZOgRUTrI+iYdnCpJdc5m2bSTxTLPAIxVhFM5kXq2V5j6umln+AkuL8GHlWqqIoKorNe+GLPUbC9Px+XMpVgRynFRzcE9XCab1PQqXsf0G5dDyH8T7U6+a6CdS2+3mxUiJUzvVsVXO6UqIm1wRd3b/6caXFEn3f7VO/mt6gDCZGnxfd2p6pyoVExZ3mSZWavz3cH/B4ftlr3est89bW5vlwu2gB6gh2gJ2WgDbaOX6AB1EUUn6Av6ir7Vvtd+1n7VfhfW2Zky5j6aOnPzfwCbc3rl</latexit>
h(k) = k mod 10
Operations
SEARCH( ): Search list at
INSERT( ): Insert x at the head of list
DELETE( ): Delete x from list
S, k
S, x
S, x
<latexit sha1_base64="SEIKMgDb+7PCwFBa5CeqB6tT7Ao=">AAAEQHicbVPbbtMwGPYWDqMctsElNxEVUjdB1UwIuJw0MkAbMKp1nZSEynH/tFYdJ9gOrDJ5CG7hbXgL3oA7xC1XOAdgTWcp0ufv8P9/nDhMGZWq1/u+smpdunzl6tq11vUbN2+tb2zePpFJJggMSMIScRpiCYxyGCiqGJymAnAcMhiGs71CH34AIWnCj9U8hSDGE04jSrAy1PDYm3ZmW8Foo93r9splLwOnBm1Ur6PRptX2xwnJYuCKMCyl5/RSFWgsFCUM8pafSUgxmeEJeAZyHIMMdDlvbt83zNiOEmEeruySPZ/QOJZyHofGGWM1lU2tIC/SvExFTwNNeZop4KRqFGXMVoldvLw9pgKIYnMDMBHUzGqTKRaYKHNEC5XcwaHbf9533YMHkDEQEwEwC7TEvOre8v/CVst/BuYMBLwyuzcpCKwSoX2pEjJl8D7XvhIU8wkDBpEyxIWBbe2nNAVp7J9yU5PDR5LEMeZj7YOIDT3FSkf5yJSDMyWJLtg8X3SyRBYVgLGGcCZLyXOCyjTSbSe3H9r1Jnq33SxVJbDKvZ3zmU57Z2sxVzBLWUHlrOrm2p5dFyt7Bg2va+ZN6kMofhPtl9810u7S2+3nlUgw0/tN8eVerYpYG9xQDw7/qwY31HLaf3q/2DUdgJmsLWGo+02dY5WJBcvrPDfXymleomVwstN1Hnedt4/au7v1BVtDd9E91EEOeoJ20Qt0hAaIoBn6jL6gr9Y364f10/pVWVdX6swdtLCs338AnaZ4iw==</latexit>
T [h(k)]
<latexit sha1_base64="GsLzojVP49Ul4ekYDANN2e4RUBs=">AAAET3icbVNdb9MwFPXWAVv52oA3XiIqpG2CqqkQ8DhpZIA2YFTrNinJKse9aa06TrAdWDH+L7zCv+GRX8IbwkkDrOksRTr3nHM/cmVHGaNSdTo/l5YbK1euXltda16/cfPW7fWNO8cyzQWBPklZKk4jLIFRDn1FFYPTTABOIgYn0WS30E8+gpA05UdqmkGY4BGnMSVYWWqwfu/IH2+et4MEq7FI9ASmZiscrLc67U55nEXgVqCFqnM42Gi0gmFK8gS4IgxL6budTIUaC0UJA9MMcgkZJhM8At9CjhOQoS7HN85DywydOBX248op2YsZGidSTpPIOosxZV0ryMs0P1fx81BTnuUKOJk1inPmqNQpduEMqQCi2NQCTAS1szpkjAUmym5srpLXP/B6L3uet/8IcgZiJAAmoZaYz7o3g7+w2QxegN2BgDc2epeBwCoVOpAqJWMGH4wOlKCYjxgwiJUlLk3Y1kFGM5DW/sXYmhw+kTRJMB/qAERi6TFWOjYDWw7OlSS6YI2Zd7JUFhWAsZpwLkvJd8OZaaBbrnEeO1UQn23XS80ysDJ+92LOZqu7NZ9XMAu5gsrJrJvn+E5VrOwZ1ryenTetllBcE11eTRlrb+Hv9sxMJJjpvbr4erdS7a22uKbuH/xXLa6p5bT/9F4R1R2AmawsUaR7dZ1jlYs5y1tj7LNy649oERx32+7Ttvv+SWtnp3pgq+g+eoA2kYueoR30Ch2iPiLoM/qKvqHvjR+NX43fK5V1eakCd9HcWVn7Ax0FfKE=</latexit>
T [h(x .key)]
<latexit sha1_base64="GsLzojVP49Ul4ekYDANN2e4RUBs=">AAAET3icbVNdb9MwFPXWAVv52oA3XiIqpG2CqqkQ8DhpZIA2YFTrNinJKse9aa06TrAdWDH+L7zCv+GRX8IbwkkDrOksRTr3nHM/cmVHGaNSdTo/l5YbK1euXltda16/cfPW7fWNO8cyzQWBPklZKk4jLIFRDn1FFYPTTABOIgYn0WS30E8+gpA05UdqmkGY4BGnMSVYWWqwfu/IH2+et4MEq7FI9ASmZiscrLc67U55nEXgVqCFqnM42Gi0gmFK8gS4IgxL6budTIUaC0UJA9MMcgkZJhM8At9CjhOQoS7HN85DywydOBX248op2YsZGidSTpPIOosxZV0ryMs0P1fx81BTnuUKOJk1inPmqNQpduEMqQCi2NQCTAS1szpkjAUmym5srpLXP/B6L3uet/8IcgZiJAAmoZaYz7o3g7+w2QxegN2BgDc2epeBwCoVOpAqJWMGH4wOlKCYjxgwiJUlLk3Y1kFGM5DW/sXYmhw+kTRJMB/qAERi6TFWOjYDWw7OlSS6YI2Zd7JUFhWAsZpwLkvJd8OZaaBbrnEeO1UQn23XS80ysDJ+92LOZqu7NZ9XMAu5gsrJrJvn+E5VrOwZ1ryenTetllBcE11eTRlrb+Hv9sxMJJjpvbr4erdS7a22uKbuH/xXLa6p5bT/9F4R1R2AmawsUaR7dZ1jlYs5y1tj7LNy649oERx32+7Ttvv+SWtnp3pgq+g+eoA2kYueoR30Ch2iPiLoM/qKvqHvjR+NX43fK5V1eakCd9HcWVn7Ax0FfKE=</latexit>
T [h(x .key)]
Worst-case running time?
<latexit sha1_base64="4M/MqGWV/y0g4LThMp1FbT4vOPQ=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUyVhhfas0MkAbMArdJjVZ5bgnbVTngu3AKpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWvohTTqFPYxbzQ48IYEEEfRlIBocJBxJ6DA686VauH3wALoI4eidnCbghGUeBH1AiNfV2OrSGy02zZbY7bcvEZqttWp1HOeh0NjfabWy1zGI1UbX2hitG0xnFNA0hkpQRIQaWmUhXES4DyiBrOKmAhNApGcNAw4iEIFxVzJrhe5oZYT/m+okkLtjTCUVCIWahp50hkRNR13LyPG2QSn/TVUGUpBIiWjbyU4ZljPMXx6OAA5VspgGhPNCzYjohnFCpj2eukt3ftXvPera98wBSBnzMAaauEiQquzecE9hoOE9BnwGHl3r3OgFOZMyVI2RMJwzeZ8qRPCDRmAEDX2ri3MCacpIgAaHtnzJdM4KPNA5DEo2UAzzU9IRI5WdDXQ6OpaAqZ7Ns3slikVcAxmrCsSikgeWWpqFqWhl+iKuNf7RWL1UmiMwG66czq831+/O5nDmT5YGYlt1sPMBVsaKnW/Paet64OoT8N1FO8V19ZZ95u+2sFClharsuvtiqVB4qjWvqzu4/VeOaWkz7V+/lu7oDCBOVxfNUr65HRKZ8zvIqy/S1Ork7+P9gf71lPW5tvNlodrvVBVtCd9BdtIos9AR10XO0h/qIojH6jL6gr8Y344fx0/hVWhcXqsxtNLeM338Af8Z3fw==</latexit>
k1<latexit sha1_base64="lDT/eQUw3jWxgZ1Bsik1qarngdk=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUybbC+lZpZIA2YBS6TWpC5bgnbVTngu3AKpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWgYhTTqFPYxbzI48IYEEEfRlIBkcJBxJ6DA696XauH34ALoI4eitnCbghGUeBH1AiNfVmOtwYLjfNltnutC0Tm622aXU2ctDpbG2229hqmcVqomrtD1eMpjOKaRpCJCkjQgwsM5GuIlwGlEHWcFIBCaFTMoaBhhEJQbiqmDXD9zQzwn7M9RNJXLCnE4qEQsxCTztDIieiruXkedoglf6Wq4IoSSVEtGzkpwzLGOcvjkcBByrZTANCeaBnxXRCOKFSH89cJbu/Z/ee9mx79wGkDPiYA0xdJUhUdm84J7DRcJ6APgMOL/TuVQKcyJgrR8iYThi8z5QjeUCiMQMGvtTEuYE15SRBAkLbP2W6ZgQfaRyGJBopB3io6QmRys+GuhwcS0FVzmbZvJPFIq8AjNWEY1FIA8stTUPVtDL8EFcb/91avVSZIDIbrJ/OrDbX78/ncuZMlgdiWnaz8QBXxYqebs1r63nj6hDy30Q5xXf1lX3m7XayUqSEqZ26+Hy7UnmoNK6pu3v/VI1rajHtX72X7+oOIExUFs9TvboeEZnyOcvLLNPX6uTu4P+Dg/WW9ai1+Xqz2e1WF2wJ3UF30Sqy0GPURc/QPuojisboM/qCvhrfjB/GT+NXaV1cqDK30dwyfv8Bh3J3gQ==</latexit>
k3<latexit sha1_base64="cSPA5Mfv22roG4qS/S87xg0uh2I=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUSWlhfZs0MkAbMArdJjVZ5bgnbVTngu3AJpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWnohTTmFAYxbzA48IYEEEAxlIBgcJBxJ6DPa92Wau738ALoI4eiePE3BDMokCP6BEaurtbNQZLTfNltntdS0Tm62uafUe5aDXW+90u9hqmcVqomrtjlaMpjOOaRpCJCkjQgwtM5GuIlwGlEHWcFIBCaEzMoGhhhEJQbiqmDXD9zQzxn7M9RNJXLCnE4qEQhyHnnaGRE5FXcvJ87RhKv11VwVRkkqIaNnITxmWMc5fHI8DDlSyYw0I5YGeFdMp4YRKfTxzlezBjt1/1rft7QeQMuATDjBzlSBR2b3hnMBGw3kK+gw4vNS71wlwImOuHCFjOmXwPlOO5AGJJgwY+FIT5wbWlJMECQht/5TpmhF8pHEYkmisHOChpqdEKj8b6XJwJAVVOZtl804Wi7wCMFYTjkQhDS23NI1U08rwQ1xt/MO1eqkyQWQ2bJ/OrDbb9+dzOXMmywMxK7vZeIirYkVPt+a19bxxdQj5b6Kc4rv6yj7zdltZKVLC1FZdfLFZqTxUGtfU7Z1/qsY1tZj2r97Pd3UHECYqi+epfl2PiEz5nOVVlulrdXJ38P/BXrtlPW513nSaGxvVBVtCd9BdtIos9ARtoOdoFw0QRRP0GX1BX41vxg/jp/GrtC4uVJnbaG4Zv/8Ai0h3gg==</latexit>
k4\ \
delete
Operations
SEARCH( ): Search list at
INSERT( ): Insert x at the head of list
DELETE( ): Delete x from list
S, k
S, x
S, x
Worst-case running time?
<latexit sha1_base64="SEIKMgDb+7PCwFBa5CeqB6tT7Ao=">AAAEQHicbVPbbtMwGPYWDqMctsElNxEVUjdB1UwIuJw0MkAbMKp1nZSEynH/tFYdJ9gOrDJ5CG7hbXgL3oA7xC1XOAdgTWcp0ufv8P9/nDhMGZWq1/u+smpdunzl6tq11vUbN2+tb2zePpFJJggMSMIScRpiCYxyGCiqGJymAnAcMhiGs71CH34AIWnCj9U8hSDGE04jSrAy1PDYm3ZmW8Foo93r9splLwOnBm1Ur6PRptX2xwnJYuCKMCyl5/RSFWgsFCUM8pafSUgxmeEJeAZyHIMMdDlvbt83zNiOEmEeruySPZ/QOJZyHofGGWM1lU2tIC/SvExFTwNNeZop4KRqFGXMVoldvLw9pgKIYnMDMBHUzGqTKRaYKHNEC5XcwaHbf9533YMHkDEQEwEwC7TEvOre8v/CVst/BuYMBLwyuzcpCKwSoX2pEjJl8D7XvhIU8wkDBpEyxIWBbe2nNAVp7J9yU5PDR5LEMeZj7YOIDT3FSkf5yJSDMyWJLtg8X3SyRBYVgLGGcCZLyXOCyjTSbSe3H9r1Jnq33SxVJbDKvZ3zmU57Z2sxVzBLWUHlrOrm2p5dFyt7Bg2va+ZN6kMofhPtl9810u7S2+3nlUgw0/tN8eVerYpYG9xQDw7/qwY31HLaf3q/2DUdgJmsLWGo+02dY5WJBcvrPDfXymleomVwstN1Hnedt4/au7v1BVtDd9E91EEOeoJ20Qt0hAaIoBn6jL6gr9Y364f10/pVWVdX6swdtLCs338AnaZ4iw==</latexit>
T [h(k)]
<latexit sha1_base64="GsLzojVP49Ul4ekYDANN2e4RUBs=">AAAET3icbVNdb9MwFPXWAVv52oA3XiIqpG2CqqkQ8DhpZIA2YFTrNinJKse9aa06TrAdWDH+L7zCv+GRX8IbwkkDrOksRTr3nHM/cmVHGaNSdTo/l5YbK1euXltda16/cfPW7fWNO8cyzQWBPklZKk4jLIFRDn1FFYPTTABOIgYn0WS30E8+gpA05UdqmkGY4BGnMSVYWWqwfu/IH2+et4MEq7FI9ASmZiscrLc67U55nEXgVqCFqnM42Gi0gmFK8gS4IgxL6budTIUaC0UJA9MMcgkZJhM8At9CjhOQoS7HN85DywydOBX248op2YsZGidSTpPIOosxZV0ryMs0P1fx81BTnuUKOJk1inPmqNQpduEMqQCi2NQCTAS1szpkjAUmym5srpLXP/B6L3uet/8IcgZiJAAmoZaYz7o3g7+w2QxegN2BgDc2epeBwCoVOpAqJWMGH4wOlKCYjxgwiJUlLk3Y1kFGM5DW/sXYmhw+kTRJMB/qAERi6TFWOjYDWw7OlSS6YI2Zd7JUFhWAsZpwLkvJd8OZaaBbrnEeO1UQn23XS80ysDJ+92LOZqu7NZ9XMAu5gsrJrJvn+E5VrOwZ1ryenTetllBcE11eTRlrb+Hv9sxMJJjpvbr4erdS7a22uKbuH/xXLa6p5bT/9F4R1R2AmawsUaR7dZ1jlYs5y1tj7LNy649oERx32+7Ttvv+SWtnp3pgq+g+eoA2kYueoR30Ch2iPiLoM/qKvqHvjR+NX43fK5V1eakCd9HcWVn7Ax0FfKE=</latexit>
T [h(x .key)]
<latexit sha1_base64="GsLzojVP49Ul4ekYDANN2e4RUBs=">AAAET3icbVNdb9MwFPXWAVv52oA3XiIqpG2CqqkQ8DhpZIA2YFTrNinJKse9aa06TrAdWDH+L7zCv+GRX8IbwkkDrOksRTr3nHM/cmVHGaNSdTo/l5YbK1euXltda16/cfPW7fWNO8cyzQWBPklZKk4jLIFRDn1FFYPTTABOIgYn0WS30E8+gpA05UdqmkGY4BGnMSVYWWqwfu/IH2+et4MEq7FI9ASmZiscrLc67U55nEXgVqCFqnM42Gi0gmFK8gS4IgxL6budTIUaC0UJA9MMcgkZJhM8At9CjhOQoS7HN85DywydOBX248op2YsZGidSTpPIOosxZV0ryMs0P1fx81BTnuUKOJk1inPmqNQpduEMqQCi2NQCTAS1szpkjAUmym5srpLXP/B6L3uet/8IcgZiJAAmoZaYz7o3g7+w2QxegN2BgDc2epeBwCoVOpAqJWMGH4wOlKCYjxgwiJUlLk3Y1kFGM5DW/sXYmhw+kTRJMB/qAERi6TFWOjYDWw7OlSS6YI2Zd7JUFhWAsZpwLkvJd8OZaaBbrnEeO1UQn23XS80ysDJ+92LOZqu7NZ9XMAu5gsrJrJvn+E5VrOwZ1ryenTetllBcE11eTRlrb+Hv9sxMJJjpvbr4erdS7a22uKbuH/xXLa6p5bT/9F4R1R2AmawsUaR7dZ1jlYs5y1tj7LNy649oERx32+7Ttvv+SWtnp3pgq+g+eoA2kYueoR30Ch2iPiLoM/qKvqHvjR+NX43fK5V1eakCd9HcWVn7Ax0FfKE=</latexit>
T [h(x .key)]
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="39Hy/T8Sh0N4/ufo6Z7/vrfygLc=">AAAEPXicdVPbbtMwGPYWDqOcNrjkxqJC2iaokrHCeldpZIA22KjoNqkJleP+aaM6B2wHVpm8ArfwNjwHD8Ad4pZbnMNgzYalSJ+/w///cWIvYYGQpvl9YdG4dPnK1aVrjes3bt66vbxy51DEKafQpzGL+bFHBLAggr4MJIPjhAMJPQZH3nQ7148+ABdBHL2VswTckIyjwA8okTm1v2qtDZebZstsd9qWic1W27Q6j3PQ6WxtttvYapnFaqJqHQxXjKYzimkaQiQpI0IMLDORriJcBpRB1nBSAQmhUzKGgYYRCUG4qhg2ww80M8J+zPUTSVywZxOKhELMQk87QyInoq7l5EXaIJX+lquCKEklRLRs5KcMyxjnb45HAQcq2UwDQnmgZ8V0QjihUp/PXCW7v2f3nvdse/chpAz4mANMXSVIVHZvOKew0XCegT4DDq/0bj8BTmTMlSNkTCcM3mfKkTwg0ZgBA19q4sLAunKSIAGh7Z8yXTOCjzQOQxKNlAM81PSESOVnQ10OTqSgKmezbN7JYpFXAMZqwokopIHllqahaloZfoSrjf9uvV6qTBCZDTbOZlabG2vzuZw5l+WBmJbdbDzAVbGip1vz2nreuDqE/DdRTvFdfWWfe7udrBQpYWqnLr7crlQeKo1r6u7eP1XjmlpM+1fv5bu6AwgTlcXzVK+uR0SmfM7yOsv0tTq9O/j/4HCjZT1pbb7ZbHa71QVbQvfQfbSKLPQUddELdID6iKIJ+oy+oK/GN+OH8dP4VVoXF6rMXTS3jN9/AAYdd18=</latexit>
O(1)
<latexit sha1_base64="yvH9wrSAU1sDDLevibKn/IGDd20=">AAAEbHicdVPdbtMwFPa2AqP8bcDdhGRRgdoJqmSssF4gTRodoA02qnWb1ITKcU/aqI4TbAc2mTwHT8MtPAMvwTPgpBms2bAU6fj7Occ+zvFiFkhlWb/m5hcqV65eW7xevXHz1u07S8t3D2WUCAo9GrFIHHtEAgs49FSgGBzHAkjoMTjyJlsZf/QZhAwifqBOY3BDMuKBH1CiDDRYsvew4wUjVseOghOlGfCRGuPIxyk+6I/rk4abC0QDV1/ivTpvDJZqVtNqtVu2ha1my7Lbz7Kg3d5Yb7Ww3bTyVUPF2h8sL9ScYUSTELiijEjZt61YuZoIFVAGadVJJMSETsgI+ibkJATp6vxuKX5kkCH2I2E+rnCOnndoEkp5GnpGGRI1lmUuAy/j+onyN1wd8DhRwOm0kJ8wrCKcNQoPAwFUsVMTECoCc1ZMx0QQqkw7ZzJ1erud7utup7PzBBIGYiQAJq6WhE+rV52zsFp1XoHpgYB3ZrcXgyAqEtqRKqJjBp9S7SgRED5iwMBXBrjUsKqdOIhBGvnX1OTk8IVGYUj4UDsgQgOPidJ+OtD5o0qqMzRNZ5UsklkGYKxEnMic6tvuVDTQNTvFT3Gx8T+ullNNHUSl/bXznnptrTHry5ALXhHIybRaB/dxkSyv6Za0HXPeqGhC9ptoJ39XX3cu3G47nZKUML1dJt9uFawItYlL7M7uP9bEJTY/7V++m+3KCiBMFhLP090yz4lKxIzkfZqasTqbHfz/4HCtaT9vrn9Yr21uFgO2iFbQQ1RHNnqBNtEbtI96iKJv6Dv6gX4u/K7cr6xUHkyl83OF5x6aWZXHfwBtm4QU</latexit>
O�length of T [h(k)]
�= O(n)
<latexit sha1_base64="4M/MqGWV/y0g4LThMp1FbT4vOPQ=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUyVhhfas0MkAbMArdJjVZ5bgnbVTngu3AKpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWvohTTqFPYxbzQ48IYEEEfRlIBocJBxJ6DA686VauH3wALoI4eidnCbghGUeBH1AiNfV2OrSGy02zZbY7bcvEZqttWp1HOeh0NjfabWy1zGI1UbX2hitG0xnFNA0hkpQRIQaWmUhXES4DyiBrOKmAhNApGcNAw4iEIFxVzJrhe5oZYT/m+okkLtjTCUVCIWahp50hkRNR13LyPG2QSn/TVUGUpBIiWjbyU4ZljPMXx6OAA5VspgGhPNCzYjohnFCpj2eukt3ftXvPera98wBSBnzMAaauEiQquzecE9hoOE9BnwGHl3r3OgFOZMyVI2RMJwzeZ8qRPCDRmAEDX2ri3MCacpIgAaHtnzJdM4KPNA5DEo2UAzzU9IRI5WdDXQ6OpaAqZ7Ns3slikVcAxmrCsSikgeWWpqFqWhl+iKuNf7RWL1UmiMwG66czq831+/O5nDmT5YGYlt1sPMBVsaKnW/Paet64OoT8N1FO8V19ZZ95u+2sFClharsuvtiqVB4qjWvqzu4/VeOaWkz7V+/lu7oDCBOVxfNUr65HRKZ8zvIqy/S1Ork7+P9gf71lPW5tvNlodrvVBVtCd9BdtIos9AR10XO0h/qIojH6jL6gr8Y344fx0/hVWhcXqsxtNLeM338Af8Z3fw==</latexit>
k1<latexit sha1_base64="lDT/eQUw3jWxgZ1Bsik1qarngdk=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUybbC+lZpZIA2YBS6TWpC5bgnbVTngu3AKpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWgYhTTqFPYxbzI48IYEEEfRlIBkcJBxJ6DA696XauH34ALoI4eitnCbghGUeBH1AiNfVmOtwYLjfNltnutC0Tm622aXU2ctDpbG2229hqmcVqomrtD1eMpjOKaRpCJCkjQgwsM5GuIlwGlEHWcFIBCaFTMoaBhhEJQbiqmDXD9zQzwn7M9RNJXLCnE4qEQsxCTztDIieiruXkedoglf6Wq4IoSSVEtGzkpwzLGOcvjkcBByrZTANCeaBnxXRCOKFSH89cJbu/Z/ee9mx79wGkDPiYA0xdJUhUdm84J7DRcJ6APgMOL/TuVQKcyJgrR8iYThi8z5QjeUCiMQMGvtTEuYE15SRBAkLbP2W6ZgQfaRyGJBopB3io6QmRys+GuhwcS0FVzmbZvJPFIq8AjNWEY1FIA8stTUPVtDL8EFcb/91avVSZIDIbrJ/OrDbX78/ncuZMlgdiWnaz8QBXxYqebs1r63nj6hDy30Q5xXf1lX3m7XayUqSEqZ26+Hy7UnmoNK6pu3v/VI1rajHtX72X7+oOIExUFs9TvboeEZnyOcvLLNPX6uTu4P+Dg/WW9ai1+Xqz2e1WF2wJ3UF30Sqy0GPURc/QPuojisboM/qCvhrfjB/GT+NXaV1cqDK30dwyfv8Bh3J3gQ==</latexit>
k3<latexit sha1_base64="cSPA5Mfv22roG4qS/S87xg0uh2I=">AAAEPHicdVNbb9MwFPYWLqPcNnjkxaJCGhNUSWlhfZs0MkAbMArdJjVZ5bgnbVTngu3AJpOfwCv8G/4H77whXnnGuQzWbFiK9Pm7nHPixF7CAiFN8/vConHh4qXLS1caV69dv3FzeeXWnohTTmFAYxbzA48IYEEEAxlIBgcJBxJ6DPa92Wau738ALoI4eiePE3BDMokCP6BEaurtbNQZLTfNltntdS0Tm62uafUe5aDXW+90u9hqmcVqomrtjlaMpjOOaRpCJCkjQgwtM5GuIlwGlEHWcFIBCaEzMoGhhhEJQbiqmDXD9zQzxn7M9RNJXLCnE4qEQhyHnnaGRE5FXcvJ87RhKv11VwVRkkqIaNnITxmWMc5fHI8DDlSyYw0I5YGeFdMp4YRKfTxzlezBjt1/1rft7QeQMuATDjBzlSBR2b3hnMBGw3kK+gw4vNS71wlwImOuHCFjOmXwPlOO5AGJJgwY+FIT5wbWlJMECQht/5TpmhF8pHEYkmisHOChpqdEKj8b6XJwJAVVOZtl804Wi7wCMFYTjkQhDS23NI1U08rwQ1xt/MO1eqkyQWQ2bJ/OrDbb9+dzOXMmywMxK7vZeIirYkVPt+a19bxxdQj5b6Kc4rv6yj7zdltZKVLC1FZdfLFZqTxUGtfU7Z1/qsY1tZj2r97Pd3UHECYqi+epfl2PiEz5nOVVlulrdXJ38P/BXrtlPW513nSaGxvVBVtCd9BdtIos9ARtoOdoFw0QRRP0GX1BX41vxg/jp/GrtC4uVJnbaG4Zv/8Ai0h3gg==</latexit>
k4\ \
delete
Load factor
Let T be a hash table of size m that stores n elements
The load factor of T is the average length of a chain. This is simply the ratio of number of elements stored to number of slots. Therefore,
If we have a good hash function, the load is balanced (most chains have length ). In this case, the cost of each Search operation is close to .
It can be challenging to find a good hash function which deterministically keeps most chains at length . Instead, we will consider situations where a hash function is randomly selected such that, on average, any chain has length .
α
αα
α
α
<latexit sha1_base64="kTovtL4hYemTTJG+jhgYphzjQhQ=">AAAERXicbVPLbtNAFJ3WPEp4tbBkMyJCKhWEuELABilScQG1QIlIWyl2o/HkOhllPDYzY2g1+DfYwt/wDXwEO8QWxg+gcTqSpTPnnPvwtW+YcqZ0t/t9adk5d/7CxZVLrctXrl67vrp2Y18lmaQwoAlP5GFIFHAmYKCZ5nCYSiBxyOEgnG0V+sEHkIol4p0+SSGIyUSwiFGiLeX7hKdTgp9i8SAerba7nW558CJwa9BG9dkbrTltf5zQLAahKSdKDd1uqgNDpGaUQ97yMwUpoTMygaGFgsSgAlM2neM7lhnjKJH2ERqX7OkIQ2KlTuLQOmOip6qpFeRZ2jDT0ZPAMJFmGgStCkUZxzrBxQTwmEmgmp9YQKhktldMp0QSqu2c5jJ5g12v/7zveTv3IOMgJxJgFhhFRFW95f+FrZb/DOwMJLyytzcpSKITaXylEzrl8D43vpaMiAkHDpG2xJkBG8ZPWQrK2j/lNqeAjzSJYyLGxgcZW3pKtInykU0Hx1pRU7B5Pu/kiSoyAOcN4ViV0tANKtPItN0c38f1JTraaKaqIojOh5unY9bbm3fn4wpmIVYyNauqeXiI62RlzaDh9Wy/ST2E4jcxfvldI+MtvN12XomUcLPdFF9u1aqMjcUNdWf3v2pxQy27/af3i1vTAYSr2hKGpt/UBdGZnLO8znO7Vm5ziRbB/mbHfdRx3z5s93r1gq2gW+g2Wkcueox66AXaQwNEUYo+oy/oq/PN+eH8dH5V1uWlOuYmmjvO7z8Oc3p2</latexit>
↵ = n/m
<latexit sha1_base64="3tMqsiZSF69+UbplZtkvXq0Oc6w=">AAAETHicbVNdb9MwFPXWMUb52AaPvFhUSGOCqakQ8DhpZIA2YFTrNikJlePetKaOE2yHbTL5KbzCv+Gd/8EbQsL5ANZ0liIdn3PuR25yw5QzpbvdHwuLraUry1dXrrWv37h5a3Vt/faRSjJJYUATnsiTkCjgTMBAM83hJJVA4pDDcTjdKfTjTyAVS8ShPk8hiMlYsIhRoi01XFs/xH7IxtzDH0ogg+Fap7vVLQ+eB04NOqg+B8P1VscfJTSLQWjKiVKe0011YIjUjHLI236mICV0SsbgWShIDCowZe85vm+ZEY4SaR+hcclejDAkVuo8Dq0zJnqimlpBXqZ5mY6eBYaJNNMgaFUoyjjWCS4GgUdMAtX83AJCJbO9YjohklBtxzWTyR3su/0XfdfdewgZBzmWANPAKCKq6m3/L2y3/edgZyDhtb29TUESnUjjK53QCYePufG1ZESMOXCItCUuDdg0fspSUNb+Obc5BZzSJI6JGBkfZGzpCdEmyoc2HZxpRU3B5vmskyeqyACcN4QzVUqeE1Smoek4OX6E60v0frOZqoogOvd6F2M2Or0Hs3EFMxcrmZpW1Vzs4TpZWTNoeF3bb1IPofhNjF9+18i4c2+3m1ciJdzsNsVXO7UqY2NxQ93b/69a3FDLbv/p/eLWdADhqraEoek3dUF0Jmcsb/LcrpXTXKJ5cNTbcp5sOe8ed7a36wVbQXfRPbSBHPQUbaOX6AANEEWn6Av6ir61vrd+tn61flfWxYU65g6aOUvLfwDzrHvB</latexit>
T⇥j⇤
An ideal but useful assumption
Assumption: Simple uniform hashing
For any key k, its hash value is drawn uniformly at random from
Let be the length of the chain
Suppose we insert n elements and the simple uniform hashing assumption holds. For any j in , what is ?
<latexit sha1_base64="fF/hLU788KAXOsd8hzdwuoYWv+w=">AAAEUXicbVNbb9MwFPbWAqPj0oHECy8WFdKYuqmZEPA4aWSANmBUdJvUhMpxT9qojh1sB1Z5+TO8wr/hiZ/CG84FWNNZivT5u5zjnMRBwiKle71fK6uN5rXrN9ZuttZv3b5zt71x70SJVFIYUMGEPAuIAhZxGOhIMzhLJJA4YHAazPZz/fQLSBUJ/lHPE/BjMuFRGFGiLTVqP/BMr4udLvbYWGjVxfG2g71s1O70dnrFwsvAqUAHVet4tNHoeGNB0xi4powoNXR6ifYNkTqiDLKWlypICJ2RCQwt5CQG5ZviBTL82DJjHAppH65xwV5OGBIrNY8D64yJnqq6lpNXacNUhy98E/Ek1cBp2ShMGdYC59PA40gC1WxuAaEysmfFdEokodrObKGSOzhy+6/6rnvYhZSBnEiAmW8U4WX3lvcXtlreS7AzkPDW7t4nIIkW0nhKCzpl8DkznpYR4RMGDEJtiSsDW8ZLogSUtV9ktiaHr1TEMeFj44GMLT0l2oTZyJaDc62oydksW3QyofIKwFhNOFeFNHT80jQyHSfD27jahJ+26qXKBNHZcPdyZrOz+2QxlzNLWRmpWdnNxUNcFSt6+jWva88rqiHkv4nxiu8aGnfp7Q6yUqSEmYO6+Ga/UmVsLK6ph0f/VYtranHaf3o/39UdQJiqLEFg+nWdE53KBcu7LL9WTv0SLYOT3R3n2Y7z4Wlnb6+6YGvoIXqENpGDnqM99BodowGi6AJ9Q9/Rj8bPxu8maq6W1tWVKnMfLazm+h+6g3qH</latexit>
{0, 1, . . . ,m � 1}
<latexit sha1_base64="fF/hLU788KAXOsd8hzdwuoYWv+w=">AAAEUXicbVNbb9MwFPbWAqPj0oHECy8WFdKYuqmZEPA4aWSANmBUdJvUhMpxT9qojh1sB1Z5+TO8wr/hiZ/CG84FWNNZivT5u5zjnMRBwiKle71fK6uN5rXrN9ZuttZv3b5zt71x70SJVFIYUMGEPAuIAhZxGOhIMzhLJJA4YHAazPZz/fQLSBUJ/lHPE/BjMuFRGFGiLTVqP/BMr4udLvbYWGjVxfG2g71s1O70dnrFwsvAqUAHVet4tNHoeGNB0xi4powoNXR6ifYNkTqiDLKWlypICJ2RCQwt5CQG5ZviBTL82DJjHAppH65xwV5OGBIrNY8D64yJnqq6lpNXacNUhy98E/Ek1cBp2ShMGdYC59PA40gC1WxuAaEysmfFdEokodrObKGSOzhy+6/6rnvYhZSBnEiAmW8U4WX3lvcXtlreS7AzkPDW7t4nIIkW0nhKCzpl8DkznpYR4RMGDEJtiSsDW8ZLogSUtV9ktiaHr1TEMeFj44GMLT0l2oTZyJaDc62oydksW3QyofIKwFhNOFeFNHT80jQyHSfD27jahJ+26qXKBNHZcPdyZrOz+2QxlzNLWRmpWdnNxUNcFSt6+jWva88rqiHkv4nxiu8aGnfp7Q6yUqSEmYO6+Ga/UmVsLK6ph0f/VYtranHaf3o/39UdQJiqLEFg+nWdE53KBcu7LL9WTv0SLYOT3R3n2Y7z4Wlnb6+6YGvoIXqENpGDnqM99BodowGi6AJ9Q9/Rj8bPxu8maq6W1tWVKnMfLazm+h+6g3qH</latexit>
{0, 1, . . . ,m � 1}<latexit sha1_base64="gcRolWCd1Lwtt5s8pvmmy35BfzI=">AAAESnicbVPdbtMwGPXWAaP8bINLbiIqpDHB1FQTcFlpZIA2YFR0m5SEynG/tKaOE2wHNhk/CbfwNrwAr8Ed4gbnB1jTWbJ0fM75fvTJX5QxKlW3+2NpubVy6fKV1avta9dv3Fxb37h1JNNcEBiSlKXiJMISGOUwVFQxOMkE4CRicBzNdgv9+CMISVP+Vp1lECZ4wmlMCVaWGq2vBQlW0yjSnvH56H04Wu90t7vlcRaBW4MOqs/haKPVCcYpyRPgijAspe92MxVqLBQlDEw7yCVkmMzwBHwLOU5Ahrrs3Dj3LDN24lTYy5VTsucjNE6kPEsi6yz6lE2tIC/S/FzFT0JNeZYr4KQqFOfMUalTjMEZUwFEsTMLMBHU9uqQKRaYKDusuUze8MAbPBt43v4DyBmIiQCYhVpiXlVvB39hux08BTsDAS/t63UGAqtU6ECqlEwZfDA6UIJiPmHAIFaWuDBgSwcZzUBa+2djc3L4RNIkwXysAxCJpadY6diMbDo4VZLogjVm3slSWWQAxhrCqSwl3w0r00h3XOM8dOpH/G6rmaqKwMr4vfMxm53e/fm4glmIFVTOqmqe4zt1srJm2PB6tt+0HkLxTXT5N2Vs/2azpT1TiQQzvdcUX+zWqki0xQ11/+C/anFDLbv9pw+KV9MBmMnaYvdm0NQ5VrmYs7wyxq6V21yiRXDU23Yfbbtvdjr9fr1gq+gOuos2kYseoz56jg7REBGUoy/oK/rW+t762frV+l1Zl5fqmNto7qys/AE0NXvT</latexit>
E[nj ]
<latexit sha1_base64="rCqfm9gvs+RUR8XeUyqDiIeqo8w=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNUTYWAx0ojA7QBo9BtUpNVjnvSmjpOsB1YZfITeIV/w//gnTfEK884F2BNZynS5+9yzokThymjUnU631dWrXPnL1xcu9S6fOXqtevrGzcOZJIJAgOSsEQchVgCoxwGiioGR6kAHIcMDsPZdqEffgAhacLfqnkKQYwnnEaUYGWoN3z0brTudNqdctnLwK2Bg+q1P9qwHH+ckCwGrgjDUg7dTqoCjYWihEHe8jMJKSYzPIGhgRzHIANdzprbdwwztqNEmIcru2RPJzSOpZzHoXHGWE1lUyvIs7RhpqLHgaY8zRRwUjWKMmarxC5e3B5TAUSxuQGYCGpmtckUC0yUOZ6FSt5gz+s/7Xve7j3IGIiJAJgFWmJedW/5f2Gr5T8BcwYCXpjdqxQEVonQvlQJmTJ4n2tfCYr5hAGDSBnizMCW9lOagjT2T7mpyeEjSeIY87H2QcSGnmKlo3xkysGJkkQXbJ4vOlkiiwrAWEM4kaU0dIPKNNKOm9v37XoTHW81S1UJrPJh93Rm0+neXcwVzFJWUDmrunn20K6LlT2Dhtcz8yb1IRS/ifbL7xppb+ntdvJKJJjpnab4fLtWRawNbqi7e/9VgxtqOe0/vV/smg7ATNaWMNT9ps6xysSC5WWem2vlNi/RMjjott2Hbff1A6fXqy/YGrqFbqNN5KJHqIeeoX00QARN0Gf0BX21vlk/rJ/Wr8q6ulJnbqKFZf3+Az+1d2o=</latexit>nj<latexit sha1_base64="3tMqsiZSF69+UbplZtkvXq0Oc6w=">AAAETHicbVNdb9MwFPXWMUb52AaPvFhUSGOCqakQ8DhpZIA2YFTrNikJlePetKaOE2yHbTL5KbzCv+Gd/8EbQsL5ANZ0liIdn3PuR25yw5QzpbvdHwuLraUry1dXrrWv37h5a3Vt/faRSjJJYUATnsiTkCjgTMBAM83hJJVA4pDDcTjdKfTjTyAVS8ShPk8hiMlYsIhRoi01XFs/xH7IxtzDH0ogg+Fap7vVLQ+eB04NOqg+B8P1VscfJTSLQWjKiVKe0011YIjUjHLI236mICV0SsbgWShIDCowZe85vm+ZEY4SaR+hcclejDAkVuo8Dq0zJnqimlpBXqZ5mY6eBYaJNNMgaFUoyjjWCS4GgUdMAtX83AJCJbO9YjohklBtxzWTyR3su/0XfdfdewgZBzmWANPAKCKq6m3/L2y3/edgZyDhtb29TUESnUjjK53QCYePufG1ZESMOXCItCUuDdg0fspSUNb+Obc5BZzSJI6JGBkfZGzpCdEmyoc2HZxpRU3B5vmskyeqyACcN4QzVUqeE1Smoek4OX6E60v0frOZqoogOvd6F2M2Or0Hs3EFMxcrmZpW1Vzs4TpZWTNoeF3bb1IPofhNjF9+18i4c2+3m1ciJdzsNsVXO7UqY2NxQ93b/69a3FDLbv/p/eLWdADhqraEoek3dUF0Jmcsb/LcrpXTXKJ5cNTbcp5sOe8ed7a36wVbQXfRPbSBHPQUbaOX6AANEEWn6Av6ir61vrd+tn61flfWxYU65g6aOUvLfwDzrHvB</latexit>
T⇥j⇤
<latexit sha1_base64="yEATv0vhw5vqi0llpR/zGEcMaNI=">AAAEPXicbVPbbtMwGPYWDqOcNrjkJqJC6iaomgoBl5VGBmgDRkW3SU2oHPdPY9Vxgu3AKpNX4BbehufgAbhD3HKLcwDWdJYiff4O///HiYOUUal6ve9r69aFi5cub1xpXb12/cbNza1bRzLJBIERSVgiTgIsgVEOI0UVg5NUAI4DBsfBfLfQjz+AkDThb9UiBT/GM05DSrAqqKgz355stnvdXrnsVeDUoI3qdTjZstreNCFZDFwRhqUcO71U+RoLRQmDvOVlElJM5ngGYwM5jkH6uhw2t+8ZZmqHiTAPV3bJnk1oHEu5iAPjjLGKZFMryPO0cabCJ76mPM0UcFI1CjNmq8Qu3tyeUgFEsYUBmAhqZrVJhAUmypzPUiV3dOAOnw1dd/8+ZAzETADMfS0xr7q3vL+w1fKegjkDAS/N7nUKAqtEaE+qhEQM3ufaU4JiPmPAIFSGODewo72UpiCN/VNuanL4SJI4xnyqPRCxoSOsdJhPTDk4VZLogs3zZSdLZFEBGGsIp7KUxo5fmSa67eT2A7vehO92mqWqBFb5uH8202n3t5dzBbOSFVTOq26uPbbrYmVPv+F1zbxJfQjFb6K98ruG2l15u728Eglmeq8pvtitVRFrgxvq/sF/1eCGWk77Tx8Wu6YDMJO1JQj0sKlzrDKxZHmV5+ZaOc1LtAqO+l3nUdd587A9GNQXbAPdQXdRBznoMRqg5+gQjRBBEfqMvqCv1jfrh/XT+lVZ19fqzG20tKzffwAexXdh</latexit>
h(k)
Expected time for unsuccessful search
Proposition: The average-case cost of an unsuccessful search is .
(Cost model: hash costs one, examining an element costs 1)
<latexit sha1_base64="Yo1iqkboAzp7bOXtSVbd6M9NE6A=">AAAEQ3icbVPbbtMwGPYWDqOcNrjkxqJCGgOmZkLAZaWRAdqAUdFtoskqx/3TWnWcYDuwyuQtuIW34SF4Bu4Qt0g4B2BNZynS5+/w/3+cOEw5U7rT+b607Jw7f+HiyqXW5StXr11fXbtxoJJMUujThCfyKCQKOBPQ10xzOEolkDjkcBhOtwv98ANIxRLxVs9SCGIyFixilGhLvXPxPewTnk7IcLXd2eyUCy8CtwZtVK/94ZrT9kcJzWIQmnKi1MDtpDowRGpGOeQtP1OQEjolYxhYKEgMKjDlyDm+Y5kRjhJpH6FxyZ5OGBIrNYtD64yJnqimVpBnaYNMR08Cw0SaaRC0ahRlHOsEF++PR0wC1XxmAaGS2VkxnRBJqLanNFfJ6+95vWc9z9u9DxkHOZYA08AoIqruLf8vbLX8p2DPQMJLu3udgiQ6kcZXOqETDu9z42vJiBhz4BBpS5wZ2DB+ylJQ1v4ptzUFfKRJHBMxMj7I2NITok2UD205ONGKmoLN83knT1RRAThvCCeqlAZuUJmGpu3m+AGuN9HxRrNUlSA6H2ydzqy3t+7O5wpmISuZmlbdPDzAdbGyZ9DwenbepD6E4jcxfvldI+MtvN1OXomUcLPTFF9s16qMjcUNdXfvv2pxQy2n/af3il3TAYSr2hKGptfUBdGZnLO8ynN7rdzmJVoEB1ub7qNN983DdrdbX7AVdAvdRuvIRY9RFz1H+6iPKBLoM/qCvjrfnB/OT+dXZV1eqjM30dxyfv8BLY55dw==</latexit>
1 + ↵
Expected time for successful search
Proposition: The average-case cost when searching for the . inserted key (after all keys have been inserted) is:
<latexit sha1_base64="l2aQDAvH9efP3drJo/qrrL47yEE=">AAAESnicbVPdbtMwGPWWAaP8rINLbiIqpDHB1FQIuJw0MkAbMCq6TWqyynG/tFYdJ9gObDJ+Em7hbXgBXoM7xA3OD2NNZynS+c45308+2VHGqFTd7s+lZWflytVrq9dbN27eur3WXr9zKNNcEBiQlKXiOMISGOUwUFQxOM4E4CRicBTNdgr96BMISVP+QZ1lECZ4wmlMCVaWGrXX6IkOEqymItFqasyo3eludcvjLgKvBh1Un4PRutMJxinJE+CKMCzl0OtmKtRYKEoYmFaQS8gwmeEJDC3kOAEZ6nJy4z6wzNiNU2E/rtySvZihcSLlWRJZZzGkbGoFeZk2zFX8PNSUZ7kCTqpGcc5clbrFGtwxFUAUO7MAE0HtrC6ZYoGJssuaq+QP9v3+y77v7z2CnIGYCIBZqCXmVfdW8A+2WsELsDsQ8MZG7zIQWKVCB1KlZMrgo9GBEhTzCQMGsbLEpQmbOshoBtLavxhbk8NnkiYJ5mMdgEgsPcVKx2Zky8GpkkQXrDHzTpbKogIw1hBOZSkNvbAyjXTHM+5jtw7ik81mqSoDKzPsXczZ6PQezucVzEKuoHJWdfPdoVsXK3uGDa9v503rJRTXpLqYMtb+wt/tmkokmOndpvh6x5zfaYsb6t7+f9XihlpOe673i6jpAMxkbYki3W/qHKtczFnels/Kaz6iRXDY2/Kebnnvn3S2t+sHtoruoftoA3noGdpGr9ABGiCCcvQVfUPfnR/OL+e386eyLi/VOXfR3FlZ+Qsoy3xV</latexit>
i th <latexit sha1_base64="2mPEEydMFOXAqfKqD3TD1g6oTOM=">AAAEOnicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBW0W3SUmoHPdPa9Vxgu3AKpMn4BbehhfhljvELQ+AcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlb9U8gzDBE05jSrAy1CEfrTvd7W617GXgNsBBzToYbVhOME5JngBXhGEpfbebqVBjoShhUHSCXEKGyQxPwDeQ4wRkqKtJC/ueYcZ2nArzcGVX7NmExomU8yQyzgSrqWxrJXme5ucqfhpqyrNcASd1ozhntkrt8rXtMRVAFJsbgImgZlabTLHARJnDWajkDfe9wfOB5+09gJyBmAiAWagl5nX3TvAXdjrBMzBnIOCV2b3JQGCVCh1IlZIpg/eFDpSgmE8YMIiVIc4NbOkgoxlIY/9UmJocPpI0STAf6wBEYugpVjouRqYcnCpJdMkWxaKTpbKsAIy1hFNZSb4b1qaRdtzCfmg3m/jdVrtUncCq8HtnM5tO7/5irmSWsoLKWd3Ns327KVb1DFtez8ybNodQ/iY6qL5rrL2lt9stapFgpnfb4sudRhWJNril7u3/Vw1uqdW0//RBuWs7ADPZWKJID9o6xyoXC5bXRWGuldu+RMvgqLftPt52Dx85/X5zwdbQHXQXbSIXPUF99AIdoCEiCNBn9AV9tb5ZP6yf1q/aurrSZG6jhWX9/gPsynaN</latexit>n<latexit sha1_base64="+xFBzuzxkzJxrHCyZJaob1lNzrU=">AAAEXnicbVNdb9MwFPW2MkZhbIMXJF4sKqQxoGoqBDxOGhmgDRgV3SY1oXLdm9aq4wTbgU3GP4Bfwyv8FN74KTgfwJrOUqTjc869177xHaWcKd3p/FpaXmlcWb26dq15/cb6zY3NrVvHKskkhT5NeCJPR0QBZwL6mmkOp6kEEo84nIxme7l+8hmkYon4oM9TCGMyESxilGhHDTdbXfwQB5Ek1Aj8GDNrYosDDp9wIRCeTolzddqdYuFF4FWghap1NNxaaQXjhGYxCE05UWrgdVIdGiI1oxxsM8gUpITOyAQGDgoSgwpNcRuL7ztmjKNEuk9oXLAXIwyJlTqPR84ZEz1VdS0nL9MGmY6eh4aJNNMgaFkoyjjWCc5bg8dMAtX83AFCJXNnxXRKXGu0a+BcJr9/6Pde9nz/4BFkHOREAsxCo4goqzeDv7DZDF6A64GEN273LgVJdCJNoHRCp67N1gRaMiImHDhE2hGXBuyYIGUpKGf/al1OAV9oEsdEjE0AMnb0lGgT2aFLB2daUZOz1s47eaLyDMB5TThThTTwwtI0NC3PuudQbaKPO/VUZQTRdtC9GLPd6j6Yj8uZhVjJ1Kys5uMBrpIVNcOa13fnTaom5M/EBMV/jYy/cLt9W4qUcLNfF1/vVaqMjcM19eDwv+pwTS1O+0/v5bu6AwhXlWU0Mr26LojO5JzlrbVurLz6EC2C427be9r23j9p7e5WA7aG7qJ7aBt56BnaRa/QEeojir6h7+gH+rnyu7HaWG9slNblpSrmNppbjTt/AAxTfrs=</latexit>
2 +n � i
m 2 + ↵
Expected time for successful search
Proposition: The average-case cost when searching for the . inserted key (after all keys have been inserted) is:
Corollary: The average-case cost when searching for an inserted key (also chosen uniformly at random from the set of n inserted keys) is:
<latexit sha1_base64="l2aQDAvH9efP3drJo/qrrL47yEE=">AAAESnicbVPdbtMwGPWWAaP8rINLbiIqpDHB1FQIuJw0MkAbMCq6TWqyynG/tFYdJ9gObDJ+Em7hbXgBXoM7xA3OD2NNZynS+c45308+2VHGqFTd7s+lZWflytVrq9dbN27eur3WXr9zKNNcEBiQlKXiOMISGOUwUFQxOM4E4CRicBTNdgr96BMISVP+QZ1lECZ4wmlMCVaWGrXX6IkOEqymItFqasyo3eludcvjLgKvBh1Un4PRutMJxinJE+CKMCzl0OtmKtRYKEoYmFaQS8gwmeEJDC3kOAEZ6nJy4z6wzNiNU2E/rtySvZihcSLlWRJZZzGkbGoFeZk2zFX8PNSUZ7kCTqpGcc5clbrFGtwxFUAUO7MAE0HtrC6ZYoGJssuaq+QP9v3+y77v7z2CnIGYCIBZqCXmVfdW8A+2WsELsDsQ8MZG7zIQWKVCB1KlZMrgo9GBEhTzCQMGsbLEpQmbOshoBtLavxhbk8NnkiYJ5mMdgEgsPcVKx2Zky8GpkkQXrDHzTpbKogIw1hBOZSkNvbAyjXTHM+5jtw7ik81mqSoDKzPsXczZ6PQezucVzEKuoHJWdfPdoVsXK3uGDa9v503rJRTXpLqYMtb+wt/tmkokmOndpvh6x5zfaYsb6t7+f9XihlpOe673i6jpAMxkbYki3W/qHKtczFnels/Kaz6iRXDY2/Kebnnvn3S2t+sHtoruoftoA3noGdpGr9ABGiCCcvQVfUPfnR/OL+e386eyLi/VOXfR3FlZ+Qsoy3xV</latexit>
i th <latexit sha1_base64="2mPEEydMFOXAqfKqD3TD1g6oTOM=">AAAEOnicbVPbbtMwGPYWDqOcNrjkJiJCGhNMTYWAy0ojA7QBW0W3SUmoHPdPa9Vxgu3AKpMn4BbehhfhljvELQ+AcwDWdJYiff4O///HiaOMUam63e8rq9aFi5cur13pXL12/cbN9Y1bRzLNBYEhSVkqTiIsgVEOQ0UVg5NMAE4iBsfRbKfUjz+AkDTlb9U8gzDBE05jSrAy1CEfrTvd7W617GXgNsBBzToYbVhOME5JngBXhGEpfbebqVBjoShhUHSCXEKGyQxPwDeQ4wRkqKtJC/ueYcZ2nArzcGVX7NmExomU8yQyzgSrqWxrJXme5ucqfhpqyrNcASd1ozhntkrt8rXtMRVAFJsbgImgZlabTLHARJnDWajkDfe9wfOB5+09gJyBmAiAWagl5nX3TvAXdjrBMzBnIOCV2b3JQGCVCh1IlZIpg/eFDpSgmE8YMIiVIc4NbOkgoxlIY/9UmJocPpI0STAf6wBEYugpVjouRqYcnCpJdMkWxaKTpbKsAIy1hFNZSb4b1qaRdtzCfmg3m/jdVrtUncCq8HtnM5tO7/5irmSWsoLKWd3Ns327KVb1DFtez8ybNodQ/iY6qL5rrL2lt9stapFgpnfb4sudRhWJNril7u3/Vw1uqdW0//RBuWs7ADPZWKJID9o6xyoXC5bXRWGuldu+RMvgqLftPt52Dx85/X5zwdbQHXQXbSIXPUF99AIdoCEiCNBn9AV9tb5ZP6yf1q/aurrSZG6jhWX9/gPsynaN</latexit>n<latexit sha1_base64="+xFBzuzxkzJxrHCyZJaob1lNzrU=">AAAEXnicbVNdb9MwFPW2MkZhbIMXJF4sKqQxoGoqBDxOGhmgDRgV3SY1oXLdm9aq4wTbgU3GP4Bfwyv8FN74KTgfwJrOUqTjc869177xHaWcKd3p/FpaXmlcWb26dq15/cb6zY3NrVvHKskkhT5NeCJPR0QBZwL6mmkOp6kEEo84nIxme7l+8hmkYon4oM9TCGMyESxilGhHDTdbXfwQB5Ek1Aj8GDNrYosDDp9wIRCeTolzddqdYuFF4FWghap1NNxaaQXjhGYxCE05UWrgdVIdGiI1oxxsM8gUpITOyAQGDgoSgwpNcRuL7ztmjKNEuk9oXLAXIwyJlTqPR84ZEz1VdS0nL9MGmY6eh4aJNNMgaFkoyjjWCc5bg8dMAtX83AFCJXNnxXRKXGu0a+BcJr9/6Pde9nz/4BFkHOREAsxCo4goqzeDv7DZDF6A64GEN273LgVJdCJNoHRCp67N1gRaMiImHDhE2hGXBuyYIGUpKGf/al1OAV9oEsdEjE0AMnb0lGgT2aFLB2daUZOz1s47eaLyDMB5TThThTTwwtI0NC3PuudQbaKPO/VUZQTRdtC9GLPd6j6Yj8uZhVjJ1Kys5uMBrpIVNcOa13fnTaom5M/EBMV/jYy/cLt9W4qUcLNfF1/vVaqMjcM19eDwv+pwTS1O+0/v5bu6AwhXlWU0Mr26LojO5JzlrbVurLz6EC2C427be9r23j9p7e5WA7aG7qJ7aBt56BnaRa/QEeojir6h7+gH+rnyu7HaWG9slNblpSrmNppbjTt/AAxTfrs=</latexit>
2 +n � i
m 2 + ↵
<latexit sha1_base64="ZUtz9Q0Ru3Jjts4Au6WBRPnjkw4=">AAAEanicbVPdbtMwFPa2AqP8beMK7caiIG2DlaZCwOWkkQHagFHRbVITKsc9aaM6TrAd2GT8GDwNt/AQvAMPgfMDW9NZivT5+znHOYmDlEVSdTq/FxaXGleuXlu+3rxx89btOyura0cyyQSFPk1YIk4CIoFFHPoqUgxOUgEkDhgcB9PdXD/+AkJGCf+ozlLwYzLmURhRoiw1XHnSxY+wFwpC9QbfdjaN7uLYYI/BZ3wueYSlE2I1M1xpddqdYuF54FSghap1OFxdanmjhGYxcEUZkXLgdFLlayJURBmYppdJSAmdkjEMLOQkBunr4s0MfmiZEQ4TYR+ucMFeTGgSS3kWB9YZEzWRdS0nL9MGmQpf+DriaaaA07JRmDGsEpyPCY8iAVSxMwsIFZE9K6YTYmeh7DBnKrn9A7f3que6+48hYyDGAmDqa0l42b3p/YPNpvcS7AwEvLW79ykIohKhPakSOrEDN9pTIiJ8zIBBqCxxaWBLe2mUgrT2b8bW5PCVJnFM+Eh7IGJLT4jSoRnacnCqJNU5a8yskyUyrwCM1YRTWUgDxy9NQ91yDN7G1Sb8tFUvVSaIMoPuxcxGq7s5m8uZuayI5LTs5uIBrooVPf2a17XnTaoh5L+J9orvGmp37u32TClSwvReXXyzW6ki1hbX1P2Dc9Ximlqc9r/ey3d1BxAmK0sQ6F5d50RlYsbyzuTXyqlfonlw1G07z9rOh6etnZ3qgi2jdXQfbSAHPUc76DU6RH1E0Xf0A/1Ev5b+NNYa9xrrpXVxocrcRTOr8eAv2fKDeA==</latexit>
2 +(n � 1)
2m 2 +
↵
2
How can we design a good hash function?
In some situations, simple uniform hashing assumption might be plausible
Otherwise, if we want to commit a single function, there are some heuristics which tend to work well in practice
• Division method (“modular hashing”)
• Multiplication method
Division method
In the division method, we simply divide by m and take the remainder:
<latexit sha1_base64="w+S4VgOQkW1cXrL9eoe7JFt3q4w=">AAAES3icbVPdbtMwGPXWDUb56+CSG4sKaZtgaiYE3CBVGhmgDRgV3SY1WeW4X1qrdhJsZ6wyeRNu4W14AJ6DO8QFzg+wprMU6fic8/3kS74g4UzpTufH0nJjZfXK1bVrzes3bt663Vq/c6TiVFLo05jH8iQgCjiLoK+Z5nCSSCAi4HAcTHdz/fgMpGJx9EHPEvAFGUcsZJRoSw1brcnGdBM/x1PsBSIeYTFstTvbneLgReBUoI2qczhcb7S9UUxTAZGmnCg1cDqJ9g2RmlEOWdNLFSSETskYBhZGRIDyTdF6hh9YZoTDWNon0rhgL0YYIpSaicA6BdETVddy8jJtkOrwmW9YlKQaIloWClOOdYzzOeARk0A1n1lAqGS2V0wnRBKq7bTmMrn9A7f3sue6+w8h5SDHEmDqG0WisnrT+wubTe8F2BlIeGNv7xKQRMfSeErHdMLhY2Y8LRmJxhw4hNoSlwZsGS9hCShr/5zZnBF8orEQJBoZD6Sw9IRoE2ZDmw7OtaImZ7Ns3sljlWcAzmvCuSqkgeOXpqFpOxl+hKtLeLpVT1VGEJ0Ndi7GbLR3NufjcmYhVjI1Lau5eICrZEVNv+Z1bb9xNYT8NzFe8V1D4y683V5WipRws1cXX+9WqhTG4pq6f/BftbimFt3+03v5re4AwlVlCQLTq+sR0amcs7zNMrtWTn2JFsHRzrbzZNt5/7jd7VYLtobuoftoAznoKeqiV+gQ9RFFZ+gL+oq+Nb43fjZ+NX6X1uWlKuYumjsrq38AinR6ng==</latexit>
h(k) = k mod m
Multiplication method
Multiplication Method:
(1) Select a constant A such that 0 < A < 1
(2) Take fractional part of k A
(3) Multiply by m and truncate<latexit sha1_base64="uQlBcSgooBLNJySq4JIrfzlP69E=">AAAEYXicbVPdbtMwGPW2Alv568blbiwqUDdB1UwIuEEaGhmgDRgV3SY1oXLcL21UOw62A5tM3oCn4RZehGteBOcHWNN9V8fnnO/HX+IgYZHSvd6vpeWVxpWr11bXmtdv3Lx1u7W+caxEKikMqGBCngZEAYtiGOhIMzhNJBAeMDgJZnu5fvIZpIpE/EGfJ+BzMomjMKJEW2rUuj/tzLbwM+yxkAkhMcedGX6OvYCLMXa2sCcLftRq97q9IvAicCrQRlUcjdZX2t5Y0JRDrCkjSg2dXqJ9Q6SOKIOs6aUKEkJnZAJDC2PCQfmmuFCG71lmjEM7TyhijQv2YoYhXKlzHlgnJ3qq6lpOXqYNUx0+9U0UJ6mGmJaNwpRhLXC+HTyOJFDNzi0gVEZ2VkynRBKq7Q7nKrmDQ7f/su+6Bw8gZSAnEmDmG0XisnvT+wubTe8F2B1IeGNP7xKQRAtpPKUFnTL4lBlPy4jEEwYMQm2JSxO2jZdECShr/5rZmjF8oYJzEo+NB5Jbekq0CbORLQdnWlGTs1k272RC5RWAsZpwpgpp6PilaWTaToYf4uoQftyulyoziM6GOxdzOu2drfm8nFnIlZGald1cPMRVsaKnX/O6dl5RLSH/TYxXfNfQuAu3289KkRJm9uvi671KldxYXFMPDv+rFtfUYtp/ej8/1R1AmKosQWD6dT0mOpVzlrdZZp+VU39Ei+B4p+s87jrvH7V3d6sHtoo20V3UQQ56gnbRK3SEBoiib+g7+oF+rvxurDVajY3SurxU5dxBc9HY/AOClH+a</latexit>
h(k) = bm(kA mod 1)c
Multiplication method
Multiplication Method:
(1) Select a constant A such that 0 < A < 1
(2) Take fractional part of k A
(3) Multiply by m and truncate
How to choose A?
tends to work well
(distributes nearby integers roughly uniformly in [0, 1])
<latexit sha1_base64="uQlBcSgooBLNJySq4JIrfzlP69E=">AAAEYXicbVPdbtMwGPW2Alv568blbiwqUDdB1UwIuEEaGhmgDRgV3SY1oXLcL21UOw62A5tM3oCn4RZehGteBOcHWNN9V8fnnO/HX+IgYZHSvd6vpeWVxpWr11bXmtdv3Lx1u7W+caxEKikMqGBCngZEAYtiGOhIMzhNJBAeMDgJZnu5fvIZpIpE/EGfJ+BzMomjMKJEW2rUuj/tzLbwM+yxkAkhMcedGX6OvYCLMXa2sCcLftRq97q9IvAicCrQRlUcjdZX2t5Y0JRDrCkjSg2dXqJ9Q6SOKIOs6aUKEkJnZAJDC2PCQfmmuFCG71lmjEM7TyhijQv2YoYhXKlzHlgnJ3qq6lpOXqYNUx0+9U0UJ6mGmJaNwpRhLXC+HTyOJFDNzi0gVEZ2VkynRBKq7Q7nKrmDQ7f/su+6Bw8gZSAnEmDmG0XisnvT+wubTe8F2B1IeGNP7xKQRAtpPKUFnTL4lBlPy4jEEwYMQm2JSxO2jZdECShr/5rZmjF8oYJzEo+NB5Jbekq0CbORLQdnWlGTs1k272RC5RWAsZpwpgpp6PilaWTaToYf4uoQftyulyoziM6GOxdzOu2drfm8nFnIlZGald1cPMRVsaKnX/O6dl5RLSH/TYxXfNfQuAu3289KkRJm9uvi671KldxYXFMPDv+rFtfUYtp/ej8/1R1AmKosQWD6dT0mOpVzlrdZZp+VU39Ei+B4p+s87jrvH7V3d6sHtoo20V3UQQ56gnbRK3SEBoiib+g7+oF+rvxurDVajY3SurxU5dxBc9HY/AOClH+a</latexit>
h(k) = bm(kA mod 1)c
<latexit sha1_base64="5GyS+SEvB5mJ8WQ/zDAuvk3dC+Y=">AAAEXnicbVPdbtMwFPa2MkZhbIMbJG4sKqQxQUk62MoF0tDIAG3AqOg2qSmV4560Vp0fbGdsMnkAnoZbeBTueBScH2BNZynS5+/nHOck9mLOpLKsX3PzC7Uri1eXrtWv31i+ubK6dutIRomg0KURj8SJRyRwFkJXMcXhJBZAAo/DsTfZzfTjUxCSReFHdR5DPyCjkPmMEmWowWrjBX6O7cfuKRHxmBlsNbfstrW5+azd3n7q8mGkpHFZTStfeBbYJWigch0O1hYa7jCiSQChopxI2bOtWPU1EYpRDmndTSTEhE7ICHoGhiQA2df526T4vmGG2I+EeUKFc/ZiQpNAyvPAM86AqLGsahl5mdZLlN/uaxbGiYKQFo38hGMV4Ww0eMgEUMXPDSBUMHNWTMdEEKrMAKcqOd0Dp/Oq4zj7DyHhIEYCYNLXkoRF97r7F9br7kswMxDw1uzexyCIioR2pYromMPnVLtKMBKOOHDwlSEuDWxoN2YxSGP/mpqaIXyhURCQcKhdEIGhx0RpPx2YcnCmJNUZm6bTTh7JrAJwXhHOZC717H5hGuiGneJHuNz4nzaqpYoEUWmvdTGz3mg9mM5lzExWMDkpujm4h8tiec9+xeuY80blELLfRLv5d/W1M/N2e2khUsL1XlV8s1uqItAGV9T9g/+qwRU1P+0/vZPtqg4gXJYWz9Odqh4SlYgpy7s0NdfKrl6iWXDUatpbTfvDk8bOTnnBltBddA+tIxttox30Gh2iLqLoG/qOfqCfC79ri7Xl2kphnZ8rM7fR1Krd+QOMKX1T</latexit>
A = 1/' = 0.61803398875 . . .
Universal hashing
The previous methods might work well in practice, but we do not have rigorous guarantees for them
Instead, we consider an idea called universal hashing
A universal hash family is a collection of hash functions . such that, for any pair of keys j, k, at most hash functions satisfy
How can we use this?
If we select h uniformly at random from , then for each pair of keys j, k, we have:
<latexit sha1_base64="zih5XZc/motLMeMpKxqQkVo7Byk=">AAAEY3icbVPrbtMwFPa2AqPjsg3+ISSLCmlMXdVMCBC/Jo0M0AaMim6Tmqxy3JPWqhMH22GbTF6Bp+EvvAcPwHvgXIA1naVIn7/LOc5JHCScKd3t/lpYXGpcu35j+WZz5dbtO3dX19aPlEglhT4VXMiTgCjgLIa+ZprDSSKBRAGH42C6m+vHX0AqJuJP+iIBPyLjmIWMEm2p4erGBL/EfexJNp5oIqU4w57ptrHTxh4fCa3aONpysJcNV1vdTrdYeB44FWihah0O15Za3kjQNIJYU06UGjjdRPuGSM0oh6zppQoSQqdkDAMLYxKB8k3xShl+bJkRDoW0T6xxwV5OGBIpdREF1hkRPVF1LSev0gapDl/4hsVJqiGmZaMw5VgLnM8Hj5gEqvmFBYRKZs+K6YRIQrWd4kwlt3/g9l73XHe/DSkHOZYAU98oEpfdm95f2Gx6r8DOQMI7u/uQgCRaSOMpLeiEw+fMeFoyEo85cAi1Ja4MbBovYQkoa/+a2ZoxnFERRSQeGQ9kZOkJ0SbMhrYcnGtFTc5m2ayTC5VXAM5rwrkqpIHjl6ahaTkZ3sLVJjzdrJcqE0Rng+3LmY3W9pPZXM7MZSVT07Kbiwe4Klb09Gte155XVEPIfxPjFd81NO7c2+1lpUgJN3t18e1upcrIWFxT9w/+qxbX1OK0//Revqs7gHBVWYLA9Op6THQqZyzvs/xaOfVLNA+OtjvOs47z8WlrZ6e6YMvoAXqENpCDnqMd9AYdoj6i6Bv6jn6gn0u/GyuN9cb90rq4UGXuoZnVePgHhEaAWA==</latexit>
h : U ! {0, 1, . . . ,m � 1}<latexit sha1_base64="zY13h4nWO5apk70r/SfHPh31jSk=">AAAETHicbVNdb9MwFPXWMUb52uCRF4sKaUwwmgkBj5NGxtAGjIpuk5qsctyb1qrjBNthmzz/FF7h3/DO/+ANIeGkYazpLEU695xzP3JlRxlnSrfbP+fmGwvXFq8v3WjevHX7zt3llXsHKs0lhS5NeSqPIqKAMwFdzTSHo0wCSSIOh9F4q9APv4BULBWf9FkGYUKGgsWMEu2o/vLKeZAQPaKEmx17jp/hpL/caq+3y4NngVeBFqrOfn+l0QoGKc0TEJpyolTPa2c6NERqRjnYZpAryAgdkyH0HBQkARWacnaLHzlmgONUuk9oXLKXMwxJlDpLIucsBlV1rSCv0nq5jl+Fhoks1yDopFGcc6xTXCwCD5gEqvmZA4RK5mbFdEQkodqta6qS393zO286vr/7BHIOcigBxqFRREy6N4N/sNkMXoPbgYR3LvqQgSQ6lSZQOqUjDp+tCbRkRAw5cIi1I65MWDNBxjJQzn5uXU0BJzRNEiIGJgCZOHpEtIlt35WDU62oKVhrp508VUUF4LwmnKpS6nnhxNQ3Lc/ip7gK4uO1eqlJBtG2t3E5Z7W18Xg6r2BmciVT40k3H/dwVazsGda8vps3rZZQXBNTXk4VG3/m77atubi523Xx7ValysQ4XFN39/6rDtfUctoLvVNEdQcQripLFJlOXRdE53LK8t5a96y8+iOaBQcb696Lde/j89bmZvXAltAD9BCtIg+9RJtoB+2jLqLoBH1F39D3xo/Gr8bvxp+JdX6uyrmPps7C4l/STXw7</latexit>
|H|/m<latexit sha1_base64="5p9M6BJwbbjAG4EX4Kwn4Y9ZLhA=">AAAETHicbVNdb9MwFPXWMUb5WAuPvFhUSGOCqakQ8FhpZAxtwKjoNqkJlePetFYdJ9gOW2XyU3iFf8M7/4M3hISThrGmsxTp3HPO/ciVHSScKd1u/1xZra1dW7++caN+89btO5uN5t1jFaeSQp/GPJanAVHAmYC+ZprDaSKBRAGHk2C6m+snn0EqFosPepaAH5GxYCGjRFtq2GhOsMcE9iKiJ5Rws58NG632Trs4eBk4JWih8hwNm7WWN4ppGoHQlBOlBk470b4hUjPKIat7qYKE0CkZw8BCQSJQvilmz/BDy4xwGEv7CY0L9nKGIZFSsyiwznxGVdVy8iptkOrwhW+YSFINgs4bhSnHOsb5IvCISaCazywgVDI7K6YTIgnVdl0Lldz+odt71XPdg8eQcpBjCTD1jSJi3r3u/YP1uvcS7A4kvLHRuwQk0bE0ntIxnXD4lBlPS0bEmAOHUFviyoRt4yUsAWXtXzJbU8AZjaOIiJHxQEaWnhBtwmxoy8G5VtTkbJYtOnms8grAeUU4V4U0cPy5aWhaToaf4DIIP25XS80ziM4Gncs5W63Oo8W8nFnKlUxN591cPMBlsaKnX/G6dt64XEJ+TUxxL1Vo3KW/28vMxaXdq4qvd0tVRsbiinpw+F+1uKIW017ovTyqOoBwVVqCwPSquiA6lQuWt1n+rJzqI1oGx50d59mO8/5pq9stH9gGuo8eoC3koOeoi/bREeojis7QV/QNfa/9qP2q/a79mVtXV8qce2jhrK3/BeWQfEI=</latexit>
h 2 H<latexit sha1_base64="QCj9gFJEEIgSLVk8AI3PbEXQWds=">AAAERHicbVPLbtNAFJ3WPEp4tbBkMyJCSiqI4ggBG6RKxQXUAiUibSXbROPJdWIy9piZMbQa/Bls4W/4B/6BHWKLGD+AxulIls6cc+7D175ByiKp+v3vK6vWufMXLq5dal2+cvXa9fWNGweSZ4LCiHLGxVFAJLAogZGKFIOjVACJAwaHwXy70A8/gJART96okxT8mEyTKIwoUYZyZ513XfwYzzrz7ni93e/1y4OXgV2DNqrP/njDansTTrMYEkUZkdK1+6nyNREqogzylpdJSAmdkym4BiYkBunrsucc3zHMBIdcmCdRuGRPR2gSS3kSB8YZEzWTTa0gz9LcTIWPfB0laaYgoVWhMGNYcVwMAE8iAVSxEwMIFZHpFdMZEYQqM6aFTM5ozxk+HTrO7l3IGIipAJj7WpKkqt7y/sJWy3sCZgYCXpjbqxQEUVxoTypOZwze59pTIiLJlAGDUBnizIBN7aVRCtLYP+UmZwIfKY9jkky0ByI29IwoHeZjkw6OlaS6YPN80cm4LDIAYw3hWJaSa/uVaazbdo7v4foSvt1spqoiiMrdwemYTnvQXYwrmKVYEcl5Vc3BLq6TlTX9htcx/fJ6CMVvor3yu4baWXq7nbwSKWF6pyk+365VEWuDG+ru3n/V4IZadvtPHxa3pgMIk7UlCPSwqSdEZWLB8jLPzVrZzSVaBgeDnv2gZ7++397aqhdsDd1Ct1EH2egh2kLP0D4aIYo4+oy+oK/WN+uH9dP6VVlXV+qYm2jhWL//AHoUeUc=</latexit>
h(j) = h(k)
<latexit sha1_base64="Eq1gCkqpdHUf0+iC6/F70ReRbhw=">AAAERHicbVPdbtMwGPUWfkb52QaX3ERUSGOCqpkQcDlpZAxtwKjoNikJleN+aa06drAdWGXyGNzC2/AOvAN3iFuEk4axprMU6XznnO8nn+w4Y1TpbvfH0rJz6fKVqyvXWtdv3Ly1urZ++0iJXBLoE8GEPImxAkY59DXVDE4yCTiNGRzHk51SP/4IUlHB3+lpBlGKR5wmlGBtqSBMsR4TzMxeMVhrdzvd6riLwKtBG9XncLDutMOhIHkKXBOGlQq8bqYjg6WmhEHRCnMFGSYTPILAQo5TUJGpZi7c+5YZuomQ9uPardjzGQanSk3T2DrLGVVTK8mLtCDXybPIUJ7lGjiZNUpy5mrhlgtwh1QC0WxqASaS2lldMsYSE23XNFfJ7x/4vRc9399/CDkDOZIAk8gozGfdW+E/2GqFz8HuQMIrG73JQGItpAmVFmTM4ENhQi0p5iMGDBJtiQsTNk2Y0QyUtX8ubE0On4hIU8yHJgSZWnqMtUmKgS0Hp1oRU7JFMe9kQpUVgLGGcKoqKfCimWlg2l7hPnLrIHm/2Sw1y8C6CLbO52y0tx7M55XMQq6kajLr5ruBWxerekYNr2/nFfUSymtiqnupEuMv/N1uYc4u7W5TfLlTqzI1FjfU/YP/qsUNtZr2TO+VUdMBmKnaEsem19Q51rmcs7wuymflNR/RIjja6nhPOt7bx+3t7fqBraC76B7aQB56irbRHjpEfUSQQF/QV/TN+e78dH45v2fW5aU65w6aO86fvwMEevk=</latexit>
H
<latexit sha1_base64="Eq1gCkqpdHUf0+iC6/F70ReRbhw=">AAAERHicbVPdbtMwGPUWfkb52QaX3ERUSGOCqpkQcDlpZAxtwKjoNikJleN+aa06drAdWGXyGNzC2/AOvAN3iFuEk4axprMU6XznnO8nn+w4Y1TpbvfH0rJz6fKVqyvXWtdv3Ly1urZ++0iJXBLoE8GEPImxAkY59DXVDE4yCTiNGRzHk51SP/4IUlHB3+lpBlGKR5wmlGBtqSBMsR4TzMxeMVhrdzvd6riLwKtBG9XncLDutMOhIHkKXBOGlQq8bqYjg6WmhEHRCnMFGSYTPILAQo5TUJGpZi7c+5YZuomQ9uPardjzGQanSk3T2DrLGVVTK8mLtCDXybPIUJ7lGjiZNUpy5mrhlgtwh1QC0WxqASaS2lldMsYSE23XNFfJ7x/4vRc9399/CDkDOZIAk8gozGfdW+E/2GqFz8HuQMIrG73JQGItpAmVFmTM4ENhQi0p5iMGDBJtiQsTNk2Y0QyUtX8ubE0On4hIU8yHJgSZWnqMtUmKgS0Hp1oRU7JFMe9kQpUVgLGGcKoqKfCimWlg2l7hPnLrIHm/2Sw1y8C6CLbO52y0tx7M55XMQq6kajLr5ruBWxerekYNr2/nFfUSymtiqnupEuMv/N1uYc4u7W5TfLlTqzI1FjfU/YP/qsUNtZr2TO+VUdMBmKnaEsem19Q51rmcs7wuymflNR/RIjja6nhPOt7bx+3t7fqBraC76B7aQB56irbRHjpEfUSQQF/QV/TN+e78dH45v2fW5aU65w6aO86fvwMEevk=</latexit>
H
<latexit sha1_base64="Fmr9SoBDsuQWfmFpkGvtwRMab+E=">AAAEYXicbVNdb9MwFPW2Alv56sbjXiwqUDfBaCYEvCBNGhmgDRgV3SY1WeW4N62p4wTbgU0m/4Bfwyv8EZ75IzgfwJrOUuTjc869176xg4QzpbvdXwuLS40rV68trzSv37h563Zrde1Ixamk0Kcxj+VJQBRwJqCvmeZwkkggUcDhOJju5vrxZ5CKxeKDPk/Aj8hYsJBRoi01bN33DiX2AjbmHTzpfNzAz+003SgoaScOn7DzKBq22t2tbjHwPHAq0EbVOByuLrW9UUzTCISmnCg1cLqJ9g2RmlEOWdNLFSSETskYBhYKEoHyTXGgDN+zzAiHsbSf0LhgL0YYEil1HgXWGRE9UXUtJy/TBqkOn/mGiSTVIGhZKEw51jHOu4NHTALV/NwCQiWze8V0QiSh2vZwJpPbP3B7L3uuu/8AUg5yLAGmvlFElNWb3l/YbHovwPZAwhu7epeAJDqWxlM6phPb38x4WjIixhw4hNoSlwZsGi9hCShr/5rZnAK+0DiKiBgZD2Rk6QnRJsyGNh2caUVNzmbZrJPHKs8AnNeEM1VIA8cvTUPTdjL8EFeL8HSznqqMIDobbF+M6bS3N2bjcmYuVjI1Lau5eICrZEVNv+Z17X7jqgn5NTFe8V9D486dbi8rRUq42auLr3crVUbG4pq6f/BftbimFrv9p/fyVd0BhKvKEgSmV9cF0amcsbzNMvusnPojmgdH21vOky3n/eP2zk71wJbROrqLOshBT9EOeoUOUR9R9A19Rz/Qz6XfjZVGq7FWWhcXqpg7aGY01v8ALQl+/g==</latexit>
Pr�h(j) = h(k)
� 1/m
Average-case analysis for universal hashing
Proposition: Let h be drawn uniformly at random from a universal family of hash functions. Consider an arbitrary key k. (i) If key k is not in the table, then the expected length of the list is at most .
(ii) Otherwise, the expected length of the list is at most .
<latexit sha1_base64="44gXwatJJymrWXYSRkMDemuZsfg=">AAAEP3icbVPbbtMwGPYWDqOcNrjkJiJCGhNUTYWAy0ojA7QBo6LdpCZUjvunNXWcYDuwyuQduIW34TF4Au4Qt9zhHIA1naVIn7/D//9x4jBlVKpO5/vaunXu/IWLG5dal69cvXZ9c+vGUCaZIDAgCUvEcYglMMphoKhicJwKwHHI4Cic7xb60QcQkib8jVqkEMR4ymlECVaGGvqYpTM83nQ67U657FXg1sBB9Tocb1mOP0lIFgNXhGEpR24nVYHGQlHCIG/5mYQUkzmewshAjmOQgS7Hze07hpnYUSLMw5VdsqcTGsdSLuLQOGOsZrKpFeRZ2ihT0eNAU55mCjipGkUZs1ViF+9uT6gAotjCAEwENbPaZIYFJsqc0FIlb3Dg9Z/2PW//HmQMxFQAzAMtMa+6t/y/sNXyn4A5AwEvzO5VCgKrRGhfqoTMGLzPta8ExXzKgEGkDHFmYEf7KU1BGvun3NTk8JEkcYz5RPsgYkPPsNJRPjbl4ERJogs2z5edLJFFBWCsIZzIUhq5QWUaa8fN7ft2vYne7jRLVQms8lH3dGbb6d5dzhXMSlZQOa+6efbIrouVPYOG1zPzJvUhFL+J9svvGmlv5e328kokmOm9pvh8t1ZFrA1uqPsH/1WDG2o57T+9X+yaDsBM1pYw1P2mzrHKxJLlZZ6ba+U2L9EqGHbb7sO2+/qB0+vVF2wD3UK30TZy0SPUQ8/QIRoggt6hz+gL+mp9s35YP61flXV9rc7cREvL+v0HNUd4sw==</latexit>↵<latexit sha1_base64="/G74V83XjY684SKAIPHPztfb8+s=">AAAEQHicbVPbbtMwGPYWDqOcNrjkJqJC6iaYmmoCLiuNDNAGjGrdJiWhctw/rVXHCbYDq0weglt4G96CN+AOccsVzgFY01mK9Pk7/P8fJw5TRqXqdr+vrFqXLl+5unatdf3GzVu31zfuHMskEwSGJGGJOA2xBEY5DBVVDE5TATgOGZyEs91CP/kAQtKEH6l5CkGMJ5xGlGBlqJMjb9qZbQaj9XZ3u1suexk4NWijeh2ONqy2P05IFgNXhGEpPaebqkBjoShhkLf8TEKKyQxPwDOQ4xhkoMt5c/uBYcZ2lAjzcGWX7PmExrGU8zg0zhirqWxqBXmR5mUqehpoytNMASdVoyhjtkrs4uXtMRVAFJsbgImgZlabTLHARJkjWqjkDg/cwfOB6+4/hIyBmAiAWaAl5lX3lv8Xtlr+MzBnIOCV2b1JQWCVCO1LlZApg/e59pWgmE8YMIiUIS4MbGk/pSlIY/+Um5ocPpIkjjEfax9EbOgpVjrKR6YcnClJdMHm+aKTJbKoAIw1hDNZSp4TVKaRbju5/ciuN9G7rWapKoFV7vXOZzrt3uZirmCWsoLKWdXNtT27Llb2DBpe18yb1IdQ/CbaL79rpN2lt9vLK5Fgpvea4svdWhWxNrih7h/8Vw1uqOW0//RBsWs6ADNZW8JQD5o6xyoTC5bXeW6uldO8RMvguLftPN7eebvT7vfrC7aG7qH7qIMc9AT10Qt0iIaIoBn6jL6gr9Y364f10/pVWVdX6sxdtLCs338Anpx4jg==</latexit>
T [h(k)]<latexit sha1_base64="Yo1iqkboAzp7bOXtSVbd6M9NE6A=">AAAEQ3icbVPbbtMwGPYWDqOcNrjkxqJCGgOmZkLAZaWRAdqAUdFtoskqx/3TWnWcYDuwyuQtuIW34SF4Bu4Qt0g4B2BNZynS5+/w/3+cOEw5U7rT+b607Jw7f+HiyqXW5StXr11fXbtxoJJMUujThCfyKCQKOBPQ10xzOEolkDjkcBhOtwv98ANIxRLxVs9SCGIyFixilGhLvXPxPewTnk7IcLXd2eyUCy8CtwZtVK/94ZrT9kcJzWIQmnKi1MDtpDowRGpGOeQtP1OQEjolYxhYKEgMKjDlyDm+Y5kRjhJpH6FxyZ5OGBIrNYtD64yJnqimVpBnaYNMR08Cw0SaaRC0ahRlHOsEF++PR0wC1XxmAaGS2VkxnRBJqLanNFfJ6+95vWc9z9u9DxkHOZYA08AoIqruLf8vbLX8p2DPQMJLu3udgiQ6kcZXOqETDu9z42vJiBhz4BBpS5wZ2DB+ylJQ1v4ptzUFfKRJHBMxMj7I2NITok2UD205ONGKmoLN83knT1RRAThvCCeqlAZuUJmGpu3m+AGuN9HxRrNUlSA6H2ydzqy3t+7O5wpmISuZmlbdPDzAdbGyZ9DwenbepD6E4jcxfvldI+MtvN1OXomUcLPTFF9s16qMjcUNdXfvv2pxQy2n/af3il3TAYSr2hKGptfUBdGZnLO8ynN7rdzmJVoEB1ub7qNN983DdrdbX7AVdAvdRuvIRY9RFz1H+6iPKBLoM/qCvjrfnB/OT+dXZV1eqjM30dxyfv8BLY55dw==</latexit>
1 + ↵
Constructing a universal family of hash functions
Let p be prime number such that all keys k are in . For each a in and b in , define a hash function:
Then is a universal family of hash functions.
<latexit sha1_base64="PG8X6KDn5RK1K0BLUOUmvdHEAps=">AAAEY3icbVPrbtMwFPa2AqPjsg3+ISSLCqkbo2omBPxBmjQyQBswKrpNakLluCetVeeC7cAm41fgafgL78ED8B44l8GazlKkz9/lHOckDlLOpOp2fy8sLjWuXL22fL25cuPmrdura+tHMskEhT5NeCJOAiKBsxj6iikOJ6kAEgUcjoPpbq4ffwEhWRJ/VGcp+BEZxyxklChLDVfbk6EmW4FpTzfwC9xuEzzFj3Cwgb0gSkY4PQfRcLXV7XSLheeBU4EWqtbhcG2p5Y0SmkUQK8qJlAOnmypfE6EY5WCaXiYhJXRKxjCwMCYRSF8Xr2TwQ8uMcJgI+8QKF+zFhCaRlGdRYJ0RURNZ13LyMm2QqfC5r1mcZgpiWjYKM45VgvP54BETQBU/s4BQwexZMZ0QQaiyU5yp5PYP3N6rnuvub0HGQYwFwNTXksRl96Z3DptN7yXYGQh4a3fvUxBEJUJ7UiV0wuGz0Z4SjMRjDhxCZYlLA5vaS1kK0tq/GVszhq80iSISj7QHIrL0hCgdmqEtB6dKUp2zxsw6eSLzCsB5TTiVhTRw/NI01C3H4Me42oSfNuulygRRZrB9MdNubW/M5nJmLiuYnJbdXDzAVbGip1/zuva8STWE/DfRXvFdQ+3Ovd2eKUVKuN6ri292K1VE2uKaun/wX7W4phan/af38l3dAYTLyhIEulfXY6IyMWN5Z4y9Vk79Es2Do+2O87TjfHjS2tmpLtgyuoceoDZy0DO0g16jQ9RHFH1HP9BP9GvpT2Olsd64W1oXF6rMHTSzGvf/AgWpf3U=</latexit>
ha,b(k) = ((ak + b) mod p) mod m
<latexit sha1_base64="HXA1b4d+PS25jG+bh0IEobmuhqg=">AAAEhnicbVNdb9MwFPW2AiN8bfDIi0U1aUxd1UzAeEGqNDKGNmBUdJtUh8pxb9qojhNsBzaZ/Ch+DeIN/glOE8aazlKUc8859177yg5SHind6fxaWl5p3Lh5a/W2c+fuvfsP1tYfnqgkkwz6LOGJPAuoAh4J6OtIczhLJdA44HAaTPcK/fQrSBUl4pO+SMGP6VhEYcSottRw7ZDEVE8Y5eYgx6+wQ8xkaGgryDEpigvsuJhw+IJp+Uu33RYmLdwpw+CSdUg+XGt22p3ZwovArUATVet4uL7SJKOEZTEIzThVauB2Uu0bKnXEOOQOyRSklE3pGAYWChqD8s3s1DnesMwIh4m0n9B4xl7NMDRW6iK2R9kozqjqWkFepw0yHb70TSTSTINgZaMw41gnuBghHkUSmOYXFlAmI7tXzCZUUqbtoOcqef0jr/em53mHLcg4yLEEmPpGUVF2d8g/6DjkNdgZSHhnow8pSKoTaYjSCZvYEeeGaBlRMebAIdSWuDZhy5A0SkFZ+/fc1hTwjSVxTMXIEJCxpSdUmzAf2nJwrhUzBZvn806eqKICcF4TztVMGrh+aRqappvjbVwF4eeteqkyg+p8sHM1Z7O583Q+r2AWcmWkpmU3Dw9wVWzW0695PbvfpBpCcU3M7F6r0HgLp9vPzeWl36+Lb/cqVcbG4pp6ePRftbimznZ7qfeKqO4AylVlCQLTq+uC6kzOWd7nxbNy649oEZzstN0Xbffjs2a3Wz2wVfQYPUGbyEW7qIsO0DHqI4Z+oJ/oN/rTWG20G88bu6V1eanKeYTmVqP7F+6Hi4s=</latexit>
H = {ha,b : 1 a p � 1, 0 b p � 1}
<latexit sha1_base64="t98YxGzh4VYivXnVU0SMbLnWxQQ=">AAAEUnicbVPdbtMwFPbWAqMM2OCCC24sKqQxdVVTIeBy0sgAbcCo6DapySrHPWmjOnawHdhk8jTcwttww6twhfMDrOksRfr8/ZzjnMRBwiKle71fK6uN5rXrN9Zutm6t375zd2Pz3rESqaQwpIIJeRoQBSziMNSRZnCaSCBxwOAkmO/l+slnkCoS/KO+SMCPyZRHYUSJttR444FnsNPB/Q722ERo1cHJjoO9bLzR7nV7xcLLwKlAG1XraLzZaHsTQdMYuKaMKDVyeon2DZE6ogyylpcqSAidkymMLOQkBuWb4g0y/NgyExwKaR+uccFeThgSK3URB9YZEz1TdS0nr9JGqQ5f+CbiSaqB07JRmDKsBc7HgSeRBKrZhQWEysieFdMZkYRqO7SFSu7w0B28GrjuQQdSBnIqAea+UYSX3VveX9hqeS/BzkDCW7t7n4AkWkjjKS3ojMGnzHhaRoRPGTAItSWuDGwbL4kSUNb+NbM1OXyhIo4JnxgPZGzpGdEmzMa2HJxrRU3OZtmikwmVVwDGasK5KqSR45emsWk7Gd7B1SY8266XKhNEZ6P+5cxWu/9kMZczS1kZqXnZzcUjXBUrevo1r2vPK6oh5L+J8YrvGhp36e32s1KkhJn9uvhmr1JlbCyuqQeH/1WLa2px2n/6IN/VHUCYqixBYAZ1nROdygXLuyy/Vk79Ei2D437XedZ1Pjxt7+5WF2wNPUSP0BZy0HO0i16jIzREFGXoG/qOfjR+Nn43V5qN0rq6UmXuo4XVXP8Dc4h6tg==</latexit>
{1, 2, . . . , p � 1}
<latexit sha1_base64="rdAR+Jafd61PyqKuD9KsMdskSTk=">AAAEUHicbVNbb9MwGPXogFFuG4gnXiwqpDF1UzMh4HHSyABtwKjoNqkJleN+aa06drAd2GTyY3iFf8Mb/4Q3cC7Ams5SlONzznfJFztKOdOm1/u5dKm1fPnK1ZVr7es3bt66vbp250jLTFEYUMmlOomIBs4EDAwzHE5SBSSJOBxHs91CP/4ESjMp3puzFMKETASLGSXGUaPVe4HtdbHXxQEfS6O7ON30gny02ult9cqFF4FXgw6q1+FordUJxpJmCQhDOdF66PVSE1qiDKMc8naQaUgJnZEJDB0UJAEd2rL/HD90zBjHUrlHGFyy5yMsSbQ+SyLnTIiZ6qZWkBdpw8zEz0LLRJoZELQqFGccG4mLYeAxU0ANP3OAUMVcr5hOiSLUuJHNZfIHB37/Rd/397uQcVATBTALrSaiqt4O/sJ2O3gObgYKXrvd2xQUMVLZQBtJpxw+5jYwihEx4cAhNo64MGDDBilLQTv7l9zlFPCZyiQhYmwDUImjp8TYOB+5dHBqNLUFm+fzTi51kQE4bwinupSGXliZRrbj5XgT15v4w0YzVRVBTD7cPh+z3tl+NB9XMAuxiulZVc3HQ1wnK2uGDa/v+pX1EIpjYoPyv8bWX/i6vbwSKeF2rym+2q1VlViHG+r+wX/V4YZadvtP7xe7pgMI17Ulimy/qQtiMjVneZMX18prXqJFcLS95T3Z8t497uzs1BdsBd1HD9A68tBTtINeokM0QBRZ9BV9Q99bP1q/Wr+XlyrrpfqN7qK5tdz+A0EHe18=</latexit>
{0, 1, . . . , p � 1}<latexit sha1_base64="rdAR+Jafd61PyqKuD9KsMdskSTk=">AAAEUHicbVNbb9MwGPXogFFuG4gnXiwqpDF1UzMh4HHSyABtwKjoNqkJleN+aa06drAd2GTyY3iFf8Mb/4Q3cC7Ams5SlONzznfJFztKOdOm1/u5dKm1fPnK1ZVr7es3bt66vbp250jLTFEYUMmlOomIBs4EDAwzHE5SBSSJOBxHs91CP/4ESjMp3puzFMKETASLGSXGUaPVe4HtdbHXxQEfS6O7ON30gny02ult9cqFF4FXgw6q1+FordUJxpJmCQhDOdF66PVSE1qiDKMc8naQaUgJnZEJDB0UJAEd2rL/HD90zBjHUrlHGFyy5yMsSbQ+SyLnTIiZ6qZWkBdpw8zEz0LLRJoZELQqFGccG4mLYeAxU0ANP3OAUMVcr5hOiSLUuJHNZfIHB37/Rd/397uQcVATBTALrSaiqt4O/sJ2O3gObgYKXrvd2xQUMVLZQBtJpxw+5jYwihEx4cAhNo64MGDDBilLQTv7l9zlFPCZyiQhYmwDUImjp8TYOB+5dHBqNLUFm+fzTi51kQE4bwinupSGXliZRrbj5XgT15v4w0YzVRVBTD7cPh+z3tl+NB9XMAuxiulZVc3HQ1wnK2uGDa/v+pX1EIpjYoPyv8bWX/i6vbwSKeF2rym+2q1VlViHG+r+wX/V4YZadvtP7xe7pgMI17Ulimy/qQtiMjVneZMX18prXqJFcLS95T3Z8t497uzs1BdsBd1HD9A68tBTtINeokM0QBRZ9BV9Q99bP1q/Wr+XlyrrpfqN7qK5tdz+A0EHe18=</latexit>
{0, 1, . . . , p � 1}
Proof sketch
Open addressing
Open addressing is another method for handling collisions. Unlike chaining, each slot stores at most one key. If we try to store a key in a slot but find that it is already occupied, we instead try some other slot, and if that slot is full, we try yet another slot, and so on.
This sequence of slots that we try when we are probing for an unoccupied slot is called a probe sequence.
A first probe sequence:
Linear probing uses this probe sequence
<latexit sha1_base64="W3z99jrBzgx6j+MYO/r8dpLDzfU=">AAAEa3icbVPtbtMwFPW2AqN8bewf8MOimtSNMTUVAn5OGhmgDRgV3SY1WeW4N61VJw62A5tMXoOn4S+8Aw/BO+B8MNZ0lhIdn3Puvfa1HSScKd3p/F5YXGpcu35j+Wbz1u07d++trN4/UiKVFPpUcCFPAqKAsxj6mmkOJ4kEEgUcjoPpbq4ffwGpmIg/6fME/IiMYxYySrSlhiudSXu6sYXzP36CnQvU3cIeHwmtLph2hJ9iZ2O40upsd4qB54FTgRaqxuFwdanljQRNI4g15USpgdNJtG+I1IxyyJpeqiAhdErGMLAwJhEo3xRby/C6ZUY4FNJ+scYFeznCkEip8yiwzojoiaprOXmVNkh1+NI3LE5SDTEtC4Upx1rgvE94xCRQzc8tIFQyu1ZMJ0QSqm03ZzK5/QO397rnuvtbkHKQYwkw9Y0icVm96f2Dzab3CmwPJLyzsw8JSKKFNJ7Sgk44fM6MpyUj8ZgDh1Bb4sqATeMlLAFl7d8ymzOGr1REEYlHxgMZWXpCtAmzoU0HZ1pRk7NZNuvkQuUZgPOacKYKaeD4pWloWk5mz76ahKeb9VRlBNHZoHs5pt3qbszG5cxcrGRqWlZz8QBXyYqafs3r2vWKqgn5NTFeca6hced2t5eVIiXc7NXFt7uVKiNjcU3dP/ivWlxTi9Ve6L18VncA4aqyBIHp1fWY6FTOWN5nmX1WTv0RzYOj7rbzfNv5+Ky1s1M9sGX0ED1GbeSgF2gHvUGHqI8o+o5+oJ/o19KfxlrjQeNRaV1cqGLW0MxorP8FG4Z/bA==</latexit>
h(k), h(k) + 1, h(k) + 2, . . . , h(k) + (m � 1)
all mod m
Linear probingUsing the hash function , insert: 35, 21, 16, 45, 31, 8
How to do SEARCH? Use probe sequence and stop when we have either found the key or arrived at an unoccupied slot.
DELETE can cause trouble for Search. Why? Solution: Upon deletion, mark slot with special value DELETED
0 1 2 3 4 5 6 7 8 9
<latexit sha1_base64="BeHDyhIzzDbxzhDwME2/JjAZcLA=">AAAETHicdVNdb9MwFPXWMUb56uCRF4sKaZugSjr29YA0aWSANmBUdJvUhMpxb9qojhNsh20y+Sm8wr/hnf/BG0LCaTJYs2Ep0vE5537kJtdPWCiVZf2Yma3NXZu/vnCjfvPW7Tt3G4v3DmWcCgpdGrNYHPtEAgs5dFWoGBwnAkjkMzjyxzu5fvQJhAxj/l6dJeBFZMjDIKREGarfWBwtjZfxMzzGrh/FA2xb/UbTalnra1urFrZaa5a9sbVlgGWtb662sW1AfpqoPAf9xVrTHcQ0jYAryoiUPdtKlKeJUCFlkNXdVEJC6JgMoWcgJxFIT096z/AjwwxwEAvzcIUn7MUITSIpzyLfOCOiRrKq5eRVWi9VwaanQ56kCjgtCgUpwyrG+SDwIBRAFTszgFARml4xHRFBqDLjmsrkdPedzouO4+w9hpSBGAqAsacl4UX1unsO63X3OZgZCHhtbm8TEETFQrtSxXTE4GOmXSVCwocMGATKEFcGrGg3CROQxv45Mzk5nNA4iggfaBdEZOgRUTrI+iYdnCpJdc5m2bSTxTLPAIxVhFM5kXq2V5j6umln+AkuL8GHlWqqIoKorNe+GLPUbC9Px+XMpVgRynFRzcE9XCab1PQqXsf0G5dDyH8T7U6+a6CdS2+3mxUiJUzvVsVXO6UqIm1wRd3b/6caXFEn3f7VO/mt6gDCZGnxfd2p6pyoVExZ3mSZWavz3cH/B4ftlr3est89bW5vlwu2gB6gh2gJ2WgDbaOX6AB1EUUn6Av6ir7Vvtd+1n7VfhfW2Zky5j6aOnPzfwCbc3rl</latexit>
h(k) = k mod 10
Linear probing
• Doesn’t work well in practice
• Suffers from primary clustering problem
• Limited number of probe sequences (only m of them)
Quadratic probing
In quadratic probing, we use a somewhat more sophisticated probe sequence. For carefully selected positive constants and , the probe sequence is
Advantages: Avoids primary clustering problem
Disadvantages: Experiences secondary clustering problem ,, Still only m probe sequences
for<latexit sha1_base64="Vjfefmj2XsHUGXl629+XZHQ7gn8=">AAAEUHicbVNbb9MwGPXWAqPcNhBPvFhUSGPqqmZCwAvSpJEB2oBR0W1SEyrH/dJadZxgO7DK5MfwCv+GN/4Jb+BcgDWdpSjH55zvki92kHCmdK/3c2W10bx0+cra1da16zdu3lrfuH2s4lRSGNCYx/I0IAo4EzDQTHM4TSSQKOBwEsz2cv3kE0jFYvFezxPwIzIRLGSUaEuN1u8y/Az3OtjpYI+PY606ONp2RuvtXrdXLLwMnAq0UbWORhuNtjeOaRqB0JQTpYZOL9G+IVIzyiFreamChNAZmcDQQkEiUL4p+s/wA8uMcRhL+wiNC/Z8hCGRUvMosM6I6Kmqazl5kTZMdfjUN0wkqQZBy0JhyrGOcT4MPGYSqOZzCwiVzPaK6ZRIQrUd2UImd3Do9l/0XfegAykHOZEAM98oIsrqLe8vbLW852BnIOG13b1NQBIdS+MpHdMph4+Z8bRkREw4cAi1JS4M2DJewhJQ1v4lszkFfKZxFBExNh7IyNJTok2YjWw6ONOKmpzNskUnj1WeATivCWeqkIaOX5pGpu1keBtXm/DDVj1VGUF0Ntw5H7PZ3nm4GJczS7GSqVlZzcVDXCUravo1r2v7jash5MfEeMV/DY279HX7WSlSws1+XXy1V6kyMhbX1IPD/6rFNbXo9p/ez3d1BxCuKksQmH5dF0SncsHyJsvstXLql2gZHO90ncdd592j9u5udcHW0D10H20iBz1Bu+glOkIDRJFBX9E39L3xo/Gr8bu5UlpXqze6gxZWs/UHJZ16kg==</latexit>
i = 0, 1, . . . ,m � 1<latexit sha1_base64="PhhOP063op6SGgWk9Sm8xupaMt4=">AAAEW3icbVNdb9MwFPXWAqMM2EA88WJRIXUDqqZCwOOkkQHagFHRbVKTVY5701q1k2A7sMnklV/DK/wXHvgvOB/Ams6SleNzzr3XvrGDhDOle71fK6uN5pWr19aut26s37x1e2PzzpGKU0lhSGMey5OAKOAsgqFmmsNJIoGIgMNxMN/N9ePPIBWLo4/6PAFfkGnEQkaJttR4A3dmnfkWfoTp2MGs+PYxO+1vYS8Q8QSL8Ua71+0VAy8DpwJtVI3D8Waj7U1imgqINOVEqZHTS7RviNSMcshaXqogIXROpjCyMCIClG+Ko2T4oWUmOIylnZHGBXsxwhCh1LkIrFMQPVN1LScv00apDl/4hkVJqiGiZaEw5VjHOO8LnjAJVPNzCwiVzO4V0xmRhGrbvYVM7vDAHbwauO7+Y0g5yKkEmPtGkais3vL+wlbLewm2BxLe2tX7BCTRsTSe0jGdcfiUGU9LRqIpBw6htsSlAdvGS1gCytq/ZjZnBF9oLASJJsYDKSw9I9qE2dimgzOtqMnZLFt08ljlGYDzmnCmCmnk+KVpbNpOhp/gahGebtdTlRFEZ6P+xZhO216bhbicWYqVTM3Lai4e4SpZUdOveV2737hqQn5NjFf819C4S6fby0qREm726uKb3UqVwlhcU/cP/qsW19Rit//0Qb6qO4BwVVmCwAzqekR0Khcs77LMPiun/oiWwVG/6zzrOh+etnd2qge2hu6jB6iDHPQc7aDX6BANEUXf0Hf0A/1s/G42mq3memldXali7qKF0bz3B3UYfAk=</latexit>
(h(k) + c1i + c2i2) mod m
<latexit sha1_base64="ssSPcmVsrVAMjCefU/Cl7ClDNX8=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNMTYWAx0ojA7QBo9BtUhIqxz1prTpOsB1YZfITeIV/w//gnTfEK884F2BNZynS5+9yzokTRxmjUnW731dWrXPnL1xcu9S5fOXqtevrGzcOZZoLAkOSslQcR1gCoxyGiioGx5kAnEQMjqLZTqkffQAhacrfqnkGYYInnMaUYGWoN2Tkjtad7na3WvYycBvgoGYdjDYsJxinJE+AK8KwlL7bzVSosVCUMCg6QS4hw2SGJ+AbyHECMtTVrIV9xzBjO06FebiyK/Z0QuNEynkSGWeC1VS2tZI8S/NzFT8ONeVZroCTulGcM1uldvni9pgKIIrNDcBEUDOrTaZYYKLM8SxU8ob73uDpwPP27kHOQEwEwCzUEvO6eyf4Czud4AmYMxDwwuxeZSCwSoUOpErJlMH7QgdKUMwnDBjEyhBnBrZ0kNEMpLF/KkxNDh9JmiSYj3UAIjH0FCsdFyNTDk6UJLpki2LRyVJZVgDGWsKJrCTfDWvTSDtuYd+3m038bqtdqk5gVfi905lNp3d3MVcyS1lB5azu5tm+3RSreoYtr2fmTZtDKH8THVTfNdbe0tvtFrVIMNO7bfH5TqOKRBvcUvf2/6sGt9Rq2n/6oNy1HYCZbCxRpAdtnWOViwXLy6Iw18ptX6JlcNjbdh9uu68fOP1+c8HW0C10G20iFz1CffQMHaAhImiCPqMv6Kv1zfph/bR+1dbVlSZzEy0s6/cfOrh3Jg==</latexit>c1<latexit sha1_base64="FLONHS3BrvwK1QUeZHdl4Kvf4hE=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNMTYWAx0ojA7QBo9BtUhIqxz1prTpOsB1YZfITeIV/w//gnTfEK884F2BNZynS5+9yzokTRxmjUnW731dWrXPnL1xcu9S5fOXqtevrGzcOZZoLAkOSslQcR1gCoxyGiioGx5kAnEQMjqLZTqkffQAhacrfqnkGYYInnMaUYGWoN2TUG6073e1utexl4DbAQc06GG1YTjBOSZ4AV4RhKX23m6lQY6EoYVB0glxChskMT8A3kOMEZKirWQv7jmHGdpwK83BlV+zphMaJlPMkMs4Eq6lsayV5lubnKn4casqzXAEndaM4Z7ZK7fLF7TEVQBSbG4CJoGZWm0yxwESZ41mo5A33vcHTgeft3YOcgZgIgFmoJeZ1907wF3Y6wRMwZyDghdm9ykBglQodSJWSKYP3hQ6UoJhPGDCIlSHODGzpIKMZSGP/VJiaHD6SNEkwH+sARGLoKVY6LkamHJwoSXTJFsWik6WyrACMtYQTWUm+G9amkXbcwr5vN5v43Va7VJ3AqvB7pzObTu/uYq5klrKCylndzbN9uylW9QxbXs/MmzaHUP4mOqi+a6y9pbfbLWqRYKZ32+LznUYViTa4pe7t/1cNbqnVtP/0QblrOwAz2ViiSA/aOscqFwuWl0VhrpXbvkTL4LC37T7cdl8/cPr95oKtoVvoNtpELnqE+ugZOkBDRNAEfUZf0Ffrm/XD+mn9qq2rK03mJlpY1u8/Po53Jw==</latexit>c2
Double hashing
Let and be auxiliary hash functions
Double hashing uses the probe sequence:
must be relatively prime to m in order for the whole table to be searched. How can this be achieved?
<latexit sha1_base64="Wxu3UHOqb2BofZZ1kuFaDv36sPM=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNMTYWAx0ojA7QBo9BtUhIqxz1prTpOsB1YZfITeIV/w//gnTfEK884F2BNZynS5+9yzokTRxmjUnW731dWrXPnL1xcu9S5fOXqtevrGzcOZZoLAkOSslQcR1gCoxyGiioGx5kAnEQMjqLZTqkffQAhacrfqnkGYYInnMaUYGWoN9ORO1p3utvdatnLwG2Ag5p1MNqwnGCckjwBrgjDUvpuN1OhxkJRwqDoBLmEDJMZnoBvIMcJyFBXsxb2HcOM7TgV5uHKrtjTCY0TKedJZJwJVlPZ1kryLM3PVfw41JRnuQJO6kZxzmyV2uWL22MqgCg2NwATQc2sNpligYkyx7NQyRvue4OnA8/buwc5AzERALNQS8zr7p3gL+x0gidgzkDAC7N7lYHAKhU6kColUwbvCx0oQTGfMGAQK0OcGdjSQUYzkMb+qTA1OXwkaZJgPtYBiMTQU6x0XIxMOThRkuiSLYpFJ0tlWQEYawknspJ8N6xNI+24hX3fbjbxu612qTqBVeH3Tmc2nd7dxVzJLGUFlbO6m2f7dlOs6hm2vJ6ZN20OofxNdFB911h7S2+3W9QiwUzvtsXnO40qEm1wS93b/68a3FKraf/pg3LXdgBmsrFEkR60dY5VLhYsL4vCXCu3fYmWwWFv23247b5+4PT7zQVbQ7fQbbSJXPQI9dEzdICGiKAJ+oy+oK/WN+uH9dP6VVtXV5rMTbSwrN9/AE3wdys=</latexit>
h1<latexit sha1_base64="LAKaScmCIBLlFSAKignpRf0L0VY=">AAAEPHicbVNbb9MwFPYWLqPcNnjkJSJCGhNMTYWAx0ojA7QBo9BtUhIqxz1prTpOsB1YZfITeIV/w//gnTfEK884F2BNZynS5+9yzokTRxmjUnW731dWrXPnL1xcu9S5fOXqtevrGzcOZZoLAkOSslQcR1gCoxyGiioGx5kAnEQMjqLZTqkffQAhacrfqnkGYYInnMaUYGWoN9NRb7TudLe71bKXgdsABzXrYLRhOcE4JXkCXBGGpfTdbqZCjYWihEHRCXIJGSYzPAHfQI4TkKGuZi3sO4YZ23EqzMOVXbGnExonUs6TyDgTrKayrZXkWZqfq/hxqCnPcgWc1I3inNkqtcsXt8dUAFFsbgAmgppZbTLFAhNljmehkjfc9wZPB563dw9yBmIiAGahlpjX3TvBX9jpBE/AnIGAF2b3KgOBVSp0IFVKpgzeFzpQgmI+YcAgVoY4M7Clg4xmII39U2FqcvhI0iTBfKwDEImhp1jpuBiZcnCiJNElWxSLTpbKsgIw1hJOZCX5blibRtpxC/u+3Wzid1vtUnUCq8Lvnc5sOr27i7mSWcoKKmd1N8/27aZY1TNseT0zb9ocQvmb6KD6rrH2lt5ut6hFgpnebYvPdxpVJNrglrq3/181uKVW0/7TB+Wu7QDMZGOJIj1o6xyrXCxYXhaFuVZu+xItg8Petvtw2339wOn3mwu2hm6h22gTuegR6qNn6AANEUET9Bl9QV+tb9YP66f1q7aurjSZm2hhWb//AFHGdyw=</latexit>
h2
General way of specifying elements in probe sequence
<latexit sha1_base64="LIfUhFRov65CSYDTgBFhb+yX380=">AAAEZnicbVPbbtMwGPa2AqOcNhDighuLCqndxtRUCLhBmjQyQBswKrpNakLkuH8aq84B24FNJg/B03ALj8Eb8Bg4B2BNZynS5+/w/86f2E85k6rf/7W0vNK6dPnK6tX2tes3bt5aW799JJNMUBjRhCfixCcSOIthpJjicJIKIJHP4dif7Rb68WcQkiXxB3WWghuRacwCRokylLe2GXZnW5j18HPcDT2rO+vhTcywQyeJwqE3MEQPO36UTHDkrXX62/1y4UVg1aCD6nXora90nElCswhiRTmRcmz1U+VqIhSjHPK2k0lICZ2RKYwNjEkE0tXlW+X4oWEmOEiEeWKFS/Z8QpNIyrPIN86IqFA2tYK8SBtnKnjmahanmYKYVo2CjGOV4GJEeMIEUMXPDCBUMHNWTEMiCFVmkHOV7NGBPXw5tO39Lcg4iKkAmLlakrjq3nb+wnbbeQFmBgLemN27FARRidCOVAkNOXzKtaMEI/GUA4dAGeLCwIZ2UpaCNPavuakZwxeaRBGJJ9oBERk6JEoHuWfKwamSVBdsns87eSKLCsB5QziVpTS23Mrk6Y6V40e43gQfN5qlqgRR+XhwPtPtDHrzuYJZyAomZ1U3G49xXazs6Ta8tjlvUg+h+E20U37XQNsLb7eXVyIlXO81xde7tSoibXBD3T/4rxrcUMvT/tOHxa7pAMJlbfF9PWzqMVGZmLO8zXNzrazmJVoER4Nt68m29f5xZ2envmCr6D56gLrIQk/RDnqFDtEIUfQNfUc/0M+V362brbute5V1eanO3EFzq4X/AGVXf80=</latexit>
h(k , i) = (h1(k) + i · h2(k)) mod m
<latexit sha1_base64="tMnbnt4PT6geZGHUgQfW4QgxLB0=">AAAEP3icbVPbbtMwGPYWDqMctsElNxEVUjdB1VQIuKw0MkAbMCraTWpC5bh/WlPHCbYDq0zegVt4Gx6DJ+AOccsdzgFY01mK9Pk7/P8fJw4SRqXqdL6vrVsXLl66vHGlcfXa9RubW9s3hzJOBYEBiVksTgIsgVEOA0UVg5NEAI4CBsfBfC/Xjz+AkDTmb9QiAT/CU05DSrAy1HA27rbmO+OtZqfdKZa9CpwKNFG1jsbbVtObxCSNgCvCsJQjp5MoX2OhKGGQNbxUQoLJHE9hZCDHEUhfF+Nm9l3DTOwwFubhyi7YswmNIykXUWCcEVYzWddy8jxtlKrwsa8pT1IFnJSNwpTZKrbzd7cnVABRbGEAJoKaWW0ywwITZU5oqZI7OHT7T/uue3APUgZiKgDmvpaYl90b3l/YaHhPwJyBgBdm9yoBgVUstCdVTGYM3mfaU4JiPmXAIFSGODewq72EJiCN/VNmanL4SOIownyiPRCRoWdY6TAbm3JwqiTROZtly04Wy7wCMFYTTmUhjRy/NI1108ns+3a1Cd/u1kuVCayyUfdsptXs7izncmYlK6icl91ce2RXxYqefs3rmnnj6hDy30R7xXcNtbvydvtZKRLM9H5dfL5XqSLSBtfUg8P/qsE1tZj2n97Pd3UHYCYrSxDofl3nWKViyfIyy8y1cuqXaBUMu23nYdt5/aDZ61UXbAPdRndQCznoEeqhZ+gIDRBB79Bn9AV9tb5ZP6yf1q/Sur5WZW6hpWX9/gOcdXgG</latexit>
h2(k)
no common factors
Average-case analysis of open addressing
Can we provide average-case guarantees for open addressing?
• Yes! Under a certain assumption
Assumption of uniform hashing - for each key, the probe sequence is chosen uniformly at random from the set of all possible permutations of . (this is not realistic, but we might approximate it in practice using, e.g., double hashing)
Proposition: Given a hash table with load factor , under uniform hashing the expected number of probes in an unsuccessful search is at most .
<latexit sha1_base64="ENa2CaIHO7Y3KofyEZw3sjjAobs=">AAAETnicbVNdb9MwFPXWAaN8bGOPvFhUSNvUTU2FgMdJIwO0AaOi26QmVI5701p14mA7sMrkt/AK/4ZX/ghvCJwPYE1nKdLxOed+5CY3SDhTutP5sbTcWLl2/cbqzeat23furq1v3DtVIpUU+lRwIc8DooCzGPqaaQ7niQQSBRzOgulBrp99BKmYiN/pWQJ+RMYxCxkl2lLD9c2tThs7bezxkdCqjaNdZ3u43ursdYqDF4FTgRaqzslwo9HyRoKmEcSacqLUwOkk2jdEakY5ZE0vVZAQOiVjGFgYkwiUb4ruM/zQMiMcCmmfWOOCvRxhSKTULAqsMyJ6oupaTl6lDVIdPvUNi5NUQ0zLQmHKsRY4HwUeMQlU85kFhEpme8V0QiSh2g5sLpPbP3Z7z3uue9SGlIMcS4CpbxSJy+pN7y9sNr1nYGcg4ZW9vUlAEi2k8ZQWdMLhQ2Y8LRmJxxw4hNoSVwbsGC9hCShr/5zZnDF8oiKKSDwyHsjI0hOiTZgNbTq40IqanM2yeScXKs8AnNeEC1VIA8cvTUPTcjK8i6tL+H6nnqqMIDobdC/HbLW62/NxObMQK5maltVcPMBVsqKmX/O6tl9RDSH/TYxXfNfQuAtvd5iVIiXcHNbFlweVKiNjcU09Ov6vWlxTi27/6b38VncA4aqyBIHp1fWY6FTOWV5nmV0rp75Ei+C0u+c83nPePmrt71cLtoruowdoCznoCdpHL9AJ6iOKZugL+oq+Nb43fjZ+NX6X1uWlKmYTzZ2V1T+yMHro</latexit>
(0, 1, . . . ,m � 1)
<latexit sha1_base64="qt8FEqQ/J3FNkiVJiqWgqZeTfds=">AAAEQHicbVPbbtMwGPYWDqMctsElNxYVUjeNqZkQcDlpZIA2YFR0m9SEynH/tFYdJ9gOrDJ5CG7hbXgL3oA7xC1XOAdgTWcp0ufv8P9/nDhMOVO62/2+tOxcunzl6sq11vUbN2+trq3fPlZJJin0acITeRoSBZwJ6GumOZymEkgccjgJp3uFfvIBpGKJeKtnKQQxGQsWMUq0pU4mnekWZhvDtXZ3u1suvAjcGrRRvY6G607bHyU0i0FoyolSA7eb6sAQqRnlkLf8TEFK6JSMYWChIDGowJTz5vi+ZUY4SqR9hMYlez5hSKzULA6tMyZ6oppaQV6kDTIdPQkME2mmQdCqUZRxrBNcvDweMQlU85kFhEpmZ8V0QiSh2h7RXCWvf+j1nvU872ALMg5yLAGmgVFEVN1b/l/YavlPwZ6BhJd29zoFSXQija90Qicc3ufG15IRMebAIdKWuDCwafyUpaCs/VNuawr4SJM4JmJkfJCxpSdEmygf2nJwphU1BZvn806eqKICcN4QzlQpDdygMg1N283xA1xvonebzVJVguh8sHM+02nvbMznCmYhK5maVt08PMB1sbJn0PB6dt6kPoTiNzF++V0j4y283X5eiZRws98UX+zVqoyNxQ314PC/anFDLaf9p/eKXdMBhKvaEoam19QF0Zmcs7zKc3ut3OYlWgTHO9vuo233zcP27m59wVbQXXQPdZCLHqNd9BwdoT6iaIo+oy/oq/PN+eH8dH5V1uWlOnMHzS3n9x9PGHg0</latexit>
h(k , i)
<latexit sha1_base64="8J5FZmw6bFA0mfP7LsfyjNfQZIU=">AAAETXicbVNdb9MwFPXWwUb52sYjLxYV0pigNBUCHkCaNDJAGzAquk1qQuW4N61Vxwm2A6tM/gqv8G945ofwhhDOB7CmsxTp+JxzP3KTGyScKd3p/FhabqxcuLi6dql5+crVa9fXNzaPVJxKCn0a81ieBEQBZwL6mmkOJ4kEEgUcjoPpbq4ffwSpWCze6VkCfkTGgoWMEm2p4fqmR3gyIfgpFvg+jvAT7AzXW512pzh4ETgVaKHqHA43Gi1vFNM0AqEpJ0oNnE6ifUOkZpRD1vRSBQmhUzKGgYWCRKB8UzSf4duWGeEwlvYRGhfs2QhDIqVmUWCdEdETVddy8jxtkOrwsW+YSFINgpaFwpRjHeN8EnjEJFDNZxYQKpntFdMJkYRqO6+5TG7/wO0977nu/l1IOcixBJj6RhFRVm96f2Gz6T0DOwMJr+ztTQKS6FgaT+mYTjh8yIynJSNizIFDqC1xbsC28RKWgLL2z5nNKeATjaOIiJHxQEaWnhBtwmxo08GpVtTkbJbNO3ms8gzAeU04VYU0cPzSNDQtJ8P3cHUJ32/XU5URRGeD7tmYrVb3znxczizESqamZTUXD3CVrKjp17yu7TeuhpD/JsYrvmto3IW328tKkRJu9uriy91KlZGxuKbuH/xXLa6pRbf/9F5+qzuAcFVZgsD06rogOpVzltdZZtfKqS/RIjjqtp2Hbeftg9bOTrVga+gmuoW2kIMeoR30Ah2iPqLoFH1BX9G3xvfGz8avxu/SurxUxdxAc2dl9Q9fqXrR</latexit>
↵ = n/m < 1
<latexit sha1_base64="kHF09FMkYrTib/kwWCnSX9gJ/oA=">AAAES3icbVPdbtMwGPXWDUb56+CSG4sKaZtgNBMCLiuNDNAGjIpuk5qsctwvrVXHCbYzVpm8CbfwNjwAz8Ed4gLnB1jTWbJ0fM75fvLFDhLOlO50fiwtN1ZWr1xdu9a8fuPmrdut9TtHKk4lhT6NeSxPAqKAMwF9zTSHk0QCiQIOx8F0N9ePz0AqFosPepaAH5GxYCGjRFtq2Go5+DHecPAj7BGeTMjmsNXubHeKhReBU4E2qtbhcL3R9kYxTSMQmnKi1MDpJNo3RGpGOWRNL1WQEDolYxhYKEgEyjdF6xl+YJkRDmNpt9C4YC9GGBIpNYsC64yInqi6lpOXaYNUh899w0SSahC0LBSmHOsY53PAIyaBaj6zgFDJbK+YTogkVNtpzWVy+wdu72XPdfcfQspBjiXA1DeKiLJ60/sLm03vBdgZSHhjT+8SkETH0nhKx3TC4WNmPC0ZEWMOHEJtiUsDtoyXsASUtX/ObE4Bn2gcRUSMjAcysvSEaBNmQ5sOzrWiJmezbN7JY5VnAM5rwrkqpIHjl6ahaTtZfgHKQ3i6VU9VRhCdDXYuxmy0dzbn43JmIVYyNS2ruXiAq2RFTb/mdW2/cTWE/JoYr/ivoXEXvm4vK0VKuNmri693K1VGxuKaun/wX7W4phbd/tN7+anuAMJVZQkC06vrguhUzlneZpl9Vk79ES2Co51t5+m28/5Ju9utHtgauofuow3koGeoi16hQ9RHFJ2hL+gr+tb43vjZ+NX4XVqXl6qYu2huraz+AYnVedg=</latexit>
1/(1� ↵)
Proposition: Given a hash table with load factor , under uniform hashing the expected number of probes in an unsuccessful search is at most .
Proof:
Average-case analysis of open addressing<latexit sha1_base64="8J5FZmw6bFA0mfP7LsfyjNfQZIU=">AAAETXicbVNdb9MwFPXWwUb52sYjLxYV0pigNBUCHkCaNDJAGzAquk1qQuW4N61Vxwm2A6tM/gqv8G945ofwhhDOB7CmsxTp+JxzP3KTGyScKd3p/FhabqxcuLi6dql5+crVa9fXNzaPVJxKCn0a81ieBEQBZwL6mmkOJ4kEEgUcjoPpbq4ffwSpWCze6VkCfkTGgoWMEm2p4fqmR3gyIfgpFvg+jvAT7AzXW512pzh4ETgVaKHqHA43Gi1vFNM0AqEpJ0oNnE6ifUOkZpRD1vRSBQmhUzKGgYWCRKB8UzSf4duWGeEwlvYRGhfs2QhDIqVmUWCdEdETVddy8jxtkOrwsW+YSFINgpaFwpRjHeN8EnjEJFDNZxYQKpntFdMJkYRqO6+5TG7/wO0977nu/l1IOcixBJj6RhFRVm96f2Gz6T0DOwMJr+ztTQKS6FgaT+mYTjh8yIynJSNizIFDqC1xbsC28RKWgLL2z5nNKeATjaOIiJHxQEaWnhBtwmxo08GpVtTkbJbNO3ms8gzAeU04VYU0cPzSNDQtJ8P3cHUJ32/XU5URRGeD7tmYrVb3znxczizESqamZTUXD3CVrKjp17yu7TeuhpD/JsYrvmto3IW328tKkRJu9uriy91KlZGxuKbuH/xXLa6pRbf/9F5+qzuAcFVZgsD06rogOpVzltdZZtfKqS/RIjjqtp2Hbeftg9bOTrVga+gmuoW2kIMeoR30Ah2iPqLoFH1BX9G3xvfGz8avxu/SurxUxdxAc2dl9Q9fqXrR</latexit>
↵ = n/m < 1
<latexit sha1_base64="kHF09FMkYrTib/kwWCnSX9gJ/oA=">AAAES3icbVPdbtMwGPXWDUb56+CSG4sKaZtgNBMCLiuNDNAGjIpuk5qsctwvrVXHCbYzVpm8CbfwNjwAz8Ed4gLnB1jTWbJ0fM75fvLFDhLOlO50fiwtN1ZWr1xdu9a8fuPmrdut9TtHKk4lhT6NeSxPAqKAMwF9zTSHk0QCiQIOx8F0N9ePz0AqFosPepaAH5GxYCGjRFtq2Go5+DHecPAj7BGeTMjmsNXubHeKhReBU4E2qtbhcL3R9kYxTSMQmnKi1MDpJNo3RGpGOWRNL1WQEDolYxhYKEgEyjdF6xl+YJkRDmNpt9C4YC9GGBIpNYsC64yInqi6lpOXaYNUh899w0SSahC0LBSmHOsY53PAIyaBaj6zgFDJbK+YTogkVNtpzWVy+wdu72XPdfcfQspBjiXA1DeKiLJ60/sLm03vBdgZSHhjT+8SkETH0nhKx3TC4WNmPC0ZEWMOHEJtiUsDtoyXsASUtX/ObE4Bn2gcRUSMjAcysvSEaBNmQ5sOzrWiJmezbN7JY5VnAM5rwrkqpIHjl6ahaTtZfgHKQ3i6VU9VRhCdDXYuxmy0dzbn43JmIVYyNS2ruXiAq2RFTb/mdW2/cTWE/JoYr/ivoXEXvm4vK0VKuNmri693K1VGxuKaun/wX7W4phbd/tN7+anuAMJVZQkC06vrguhUzlneZpl9Vk79ES2Co51t5+m28/5Ju9utHtgauofuow3koGeoi16hQ9RHFJ2hL+gr+tb43vjZ+NX4XVqXl6qYu2huraz+AYnVedg=</latexit>
1/(1� ↵)