lecture15 16 hashing

Preview:

Citation preview

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� ↵)

Recommended