Skip to content

Instantly share code, notes, and snippets.

@LeslieK
Created March 23, 2014 04:07
Show Gist options
  • Save LeslieK/9718616 to your computer and use it in GitHub Desktop.
Save LeslieK/9718616 to your computer and use it in GitHub Desktop.
Investigating Heights: Binary Search Tree vs Red-Black Tree
{
"metadata": {
"name": "RedBlackTreesPlots"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "%matplotlib inline",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": "import matplotlib.pyplot as plt\nimport numpy as np\nimport math",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Red-Black Trees: plot of height as keys are added in ascending order"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from redblacktrees2 import RedBlackBST\ntrials = 10000\nmaxval = 20\ntitle = \"red black trees (height)\"\nr = RedBlackBST(trials, maxval, title)\n\nkeys = range(trials)\n\nfor k in keys:\n r.put(k, k)\n \nprint r.size(), \"max value = \", r.a.vals[trials - 1], \"max mean = \", r.a.means[trials - 1]\nr.a.plotData()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 max value = 14.0 max mean = 12.3631\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nrkJggg==\n",
"text": "<matplotlib.figure.Figure at 0xaa3ab70>"
}
],
"prompt_number": 9
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Red-Black Trees: plot of black height as keys are added in ascending order"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from redblacktrees2 import RedBlackBST\ntrials = 10000\nmaxval = 20\ntitle = \"red black trees (black height)\"\nr = RedBlackBST(trials, maxval, title)\n\nkeys = range(trials)\n\nfor k in keys:\n r.put(k, k)\n \nprint r.size(), \"max value = \", r.a.vals[trials - 1], \"max mean = \", r.a.means[trials - 1]\nr.a.plotData()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 max value = 12.0 max mean = 10.3644\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nYII=\n",
"text": "<matplotlib.figure.Figure at 0x8558c50>"
}
],
"prompt_number": 8
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Red-Black Trees: plot of height as keys are added in descending order"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from redblacktrees2 import RedBlackBST\ntrials = 10000\nmaxval = 20\ntitle = \"red black trees - descending order (height)\"\nr = RedBlackBST(trials, maxval, title)\n\nkeys = range(trials, 0, -1)\n\nfor k in keys:\n r.put(k, k)\n \nprint r.size(), \"max value = \", r.a.vals[trials - 1], \"max mean = \", r.a.means[trials - 1]\nr.a.plotData()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 max value = 18.0 max mean = 16.8262\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nSKi1tEddpUg0pWlu3LhR4zLV27CwsJC3y9bWFm3atMGoUaOQk5OD+Pj4Ost31DbP3t5e7pOaYrl7\n967eNiwsLODs7CyXIaltm6q/11U/D5qSKQC02qgau4ODA+zs7JCZmalVZkXTV5pSPZpzpzExMUhO\nTq5x2+p6/zXldh50m7p37464uLj7Kj0DSO+3t7c3UlNTtdqo3jd9+vRBfHw8nn/+eV78SERE5o17\nKs0U+5KoeWOZFiIiMntMKkREZDBMKkREZDBMKkREZDBMKkREZDBMKkREZDBMKkREZDBMKkREZDBM\nKkREZDCWpg7AYKoUZTSoel5x6u/vj6effhobN25ESkoKpkyZguXLl2POnDk4fvw4IiIisH37djg4\nOCA+Ph6LFy/GhQsX4OfnhzVr1mDw4MEAgPXr1+Odd95BRkYGXF1d8dJLL2HBggUAgLi4OMycOROL\nFy/GqlWrYGFhIa8DAPbt24cXXngB6enpsLOzw6JFi7BkyZIaY/7oo4/kelvVKRQKWFpa1lpvKzg4\nGHZ2drXWB2uIuknV5zk6OmLUqFEAIN+rRl9dr/psk4ODwwPXx+rTpw+SkpJw7dq1B9omJycnXLx4\nUat9QLteVNVabUqlEnZ2dlr1rTQ2b95c63bXtp2aelGHDh3S24amrpe1tTXS09MBADY2NmjTpo28\nTPfu3eHh4YGcnBzs37+/1u0uLy+X63A5ODjAw8MDeXl5cHJyQp8+fQAAW7duRVlZmU5dL80yfn5+\nWL9+PcrKyuR1a1S9X9K2bdu0+lhfTBUVFTXWvnN0dIS/vz9Onz5d6zKabdJ8Rjw8PORbXISEhMDD\nwwPx8fE677emTU0dt6o19TR9Xr2e2fLly6FSqaR129vDrrISitxcBNjaIlCpRMnly8hPTq5xmx9U\n00kqJqZQKPD999/Lf3jh4eFITEzE+vXrERwcjFGjRmHt2rWYP38+Ro8ejU2bNmHkyJE4ePAgJk6c\niEuXLsHZ2Rnu7u7Yu3cvAgICcPjwYTzyyCPo1asXwsPDAQDXr19HYWEhsrKycODAAUyaNAnjx4+H\nvb095s+fj2+//Rb9+/dHQUGB1r3uiajxUqjVaHXnDuzz8mBRXIw2KhVcMzNhW14Oq9xceABwqawE\nioqw4Px5tCwrQ0uVCi3Ly9GistK4sTaZ2l8m3lMJCAjA8uXLMX36dADSDbvc3d3x4YcfAgA++OAD\nHDp0CH379sW5c+fkkvUAMHLkSMyYMQOzZs3SaXf8+PEYMmQInn32WcTFxWHUqFEoLi5GixbSkUt3\nd3fs3r0bERER8PPzwyuvvIJp06bBzs6u1nhZ+4vIyIQASkqAvDzpkZsL3Lol/az+yMsDCgr+fNy5\nY/BwFECDfAdwT8WA3N3d5d9bt26t9dza2hrFxcVIS0vD9u3bsXv3bnleRUUFHnroIQBSGe5ly5bh\n8uXLqKysRElJCbp27Sov6+zsLCcUQLpTZHFxMQDgu+++w5tvvomXX34ZXbt2xcqVK+XDBUR0H4QA\nKiqAsjLg7l3p5507ukmgqAhQq4HSUqC4WHoUFgK3b/+ZRPLygPJyU29Rg2NSaUBV/wvQHA/38fFB\nVFQUPvnkE53lNbce3rRpEx577DFYWFhg/Pjx9f5vomfPntixYwfUajXef/99TJkypdbj+kTNSlkZ\ncPUqcOECcPEikJEBZGUBN25IyUCTNKr/5B79PWk6ScXM33hNYpg5cyZ69eqFAwcOYOjQoVCpVIiP\nj0eHDh1gZ2en99bDXbp0qbN9lUqFb775BqNHj4a9vT2USiVvJ0zNixBSgkhJkZLHlSvS72lpwO+/\nA+npZv890SBsbQFXV8DFRXp4eQEeHsCbbzbI6ppOUjFDVW8TrFAooFAo4O3tjZ07d+LFF1/E9OnT\nYWFhgd69e+Ojjz7SuvXw3bt3MWbMmFpvPVzdpk2b8Mwzz0CtViM4OBibN29usG0jMrqiIilJpKb+\n+cjOBq5flxJGRoa0Z9EUKRSAnR1gb6/7cHeXkoTm4e4OODlJycTGBmjZUn+bDZRUms6Jeron7Esy\nG6WlQE6O9MjO1v2ZnQ1cuyad1G7sWrYEnJ2lL31n55ofTk6Ag8OfiUOpBFoY9rLChvoO4J4KETWc\nykrpvIVmz6LqnkZWlpQwCgpMG2NdLC2BVq0Aa+s/H05O2onBwUFaztpa2kPQPDTLaR6tWzfcSFUz\nwaRCRPdHCCA/XzpnkZYm7U3k5EjJIiNDShzXrpnXiCdvbyAoCOjUCWjf/s/zC0rln4mjagJp1Qrg\nucl7wqRCRLpUKilBpKcDly8DyclSssjPlx43b0qJ5I/h7GbDxgYICJAe7dsDgYGAvz/g5we0awdU\nucqfGgaTSjO2bNmyGufVdrzV1tZWLgFSU3kKQCrfUVlZqXe+psyEv78/fvnlF71lVTQlLgDIZVwc\nHBwQFBSEnJwcnRIc3377rXzNjj7VS6NUL0Xi4eGB1NRUlOk52asprxEUFITExMQ/y2D8ER/wZymS\nqqUy6rNNtra28Pb2RklJidY27du3Dzdu3Ki1tEdsbGydpUg+eOcdqDMy0Ka0FK1LStC6tFT6vbQU\ndhUVcLeyQllGBlqVlKBNaSnalJWhVWkpFOZ2zs3CAvD1Bfz9kaxSId/BAc5hYbBt3x5qd3eo27aF\nT5cu8uGltLQ0ANp9UV3196n6ZyIoKEj+fGpKCmlo+jwpKQmnTp2SX6MpK1N1mfj4eOTl5emUz6ka\n25o1a7RKuegruVOf97uu8jSafmkoTCpETUVFBSyvXYNVcrJ0+OnMGSAxEU9fv27qyGpVqVCg1M4O\n8PCAom1b5AC43aoVrAMC4Na1K9Surqjw8IB3797SeQsAx6p8cVpW+eJs6ucrGgOO/mqm2JeNWEHB\nnxfwJSdL12QkJUm/m9P5Cw0HB+kQVECA9k9fX8DTUzrRzfMWRsfRXwAcHR1rvU6D6q/qYRsyQ3fv\nSiOlLl+WLuK7fFlKIhcuSOc6zEWrVlJy8POTfnp7S9dJeHlJ0/z9paRCzUaj2lMhalIKC6XDVJqr\nvy9f/jOJXLsmDcc1JWdnKTm0ayeNmGrX7s/hs46OgI+PdKU2/9FrlLinQtRY3LkjjZoqKpJGSt24\nIV31nZ0t7X1cuSKVDSkqMk48LVpIw2bd3LQvvKt6rUX1aU5OgJWVceKjJoVJhehB3LkD/O9/0jmN\nxETg2DHpuan2MpydgZAQoEsXIDwc6NkTCA1lgiCjYVIhqsvdu9KeRXLyn4eo0tKkw1a//278BGJh\nIV1/ERwsPdq3Bzp2lC7oc3U1bixE1TCpEJWWSgkjKUm6CryoSDpklZkpTU9NNc2eR9u2UsLo0OHP\nn5orwWsqEkhkYg2aVObNm4e9e/fCzc0NZ8+eBQBER0fjs88+g+sf/1GtWLECI0eObMgwiKSbJV25\nIhUlzMmRRlFduCAlkpQU05REb9lSOhHu4yMljKrJIzBQujqcqJFp0NFfR44cga2tLWbNmiUnlWXL\nlkGpVGLx4sU1B8XRX1RfQkjnMA4ckEZMaW6sVFYm3Wnvxg2pvEhurnHj8vGR7l2hVEpDbDUPL68/\ny4d4enLkFJlMoxz9NXDgQKSmpupMZ8KgB5KbC/z0E/Djj8C+fdKwXFPy9wfCwqQT5N27A337Soeu\niJohk5xTef/997Fx40b07NkTq1evhoMBLo6qWs8mKSkJqampcHJyQp8+fZCTk4OEhARYW1vDw8MD\nycnJyM8xIRdvAAAeqElEQVTPBwC4ubkBAHJzc/XWn7KwsMCwYcOQkJBQ4zKaCzJrSpYKhQKurq5y\nrSd9rKysUFlZWWsNrO7duyMpKanWWwTrq2+liU3TjrW1tVYbmv9YFAoFbGxs0KZNG9y+fRsqlUqu\n0WVtba1Vh8jPzw+rVq3SqpNVvW5Snz59cOjQoVrrZFWvm6SpdyQv4+6O899/jza//IL2N27APSUF\nVlev1rj9DaXMyQno0AHWXbvidEEBcu3t4dW/P+x79IBQKgFo11b66s03a60XVb0WlJ+fn06tqm3b\nttVZL6o+9a0071Nt72Vd9aJOnjyJpKQktGnTBv7+/rXWlKotlurbpG+769NOfZapD03tr9o+n6mp\nqTrvQdV1G2qb6noP6tuOofrmfhk9qSxcuBCvv/46AOC1117DkiVL8Pnnn+ssFx0dLf8eGRmJyMhI\nI0VIptSiogIu167B9do1BO7cCYfERPjVkowNpaJtW1h27ozTRUUosrZGua0tFO7uuOvlhRv29vAK\nDpa/MM798cfvGBwMuz8SCpG5i4uLQ1xcXIOvp8GvqE9NTcWYMWPkcyr1mcdzKs1EUZF0GCsxURqa\ne/Ei8Ntv0nkRQ7O0lM5l+PhIV4MHBEiHqzp1koblMjlQM9Moz6nok52dDU9PTwDAf//7X3Tp0sXY\nIZCpqFTAyZPAwYPS4+RJoKLiwdu1tAQGDQIefli6+K9VK+nh4CCdLHd3l06KW3IEPVFDa9C/sunT\np+Pnn3/GrVu34OPjg2XLliEuLg6//vorFAoFAgICsG7duoYMgUylogI4exaIjwd+/VXaA/nf/6Rr\nQgyhUydgyBBg2DDpp729YdologfCgpL0YISQhu7+/ruUOC5dkn6eOGG4uwK2bCmNqBo0SPrZu7dU\nm4qI7luTOfxFjVxlJRAbC3z8MXD8uHRvjz/uRmgwrq5SzaqICKB/f+nB28ASNQpMKlQ3tRo4fBjY\nvx/YulW6yNBQfHykQ1hhYVJ59U6dpGm8KJCoUWJSIf2uXZP2RA4elC4wzM42TLtOTtI5kIcfBoYO\nlUZkMYEQNRlMKiSpqJBOqv/wA7Brl3RS/UHZ20vnQPr0kcqwh4VxL4SoiWNSaa5UKqmgYny8VDfr\n4EHp/Mj9sLaWbiXboYOUPIKCpAQSGirdIIqImg0mleZCCGlU1ubNwLffSuXc71eLFsDIkcDMmdL5\nEGdn7n0QEYBGOqS4ap0vAHIdJScnJ+Tk5Mh1vRwcHNCyZUu5jpU+1WtlVefm5obCwkKtGlf3sh32\n9vYICgpCYmKi3vVolvHw8MClS5cghICtrS3aVBntVLUW0IYNG2rcDkdHR5SXl2ttf0eVCh4//4x2\nv/wCuwc4LyKsrFAaGYk2U6cCo0cD7u46dZOq15TKycmps15UTEyMVp22+62b9NFHH8m11RwcHODh\n4SF/Jvr06QMAiI2NrbO2Ul31l+oTi2abaqsXZcwaToaoKWWoWExdl6o6Q7zfjbVvOKSY6lZZCdf0\ndPj8/jt80tMReO0anB6gbtZNHx+o+/ZFi+HDUda7N4RSaTZfBkRknhrlngpVUVgIHD0q1dD6/nvp\nIsT7pVRKI7JGjgRGjJBKuhNRk8Q9leZOCOnOhb/+Kg3vvXgROHMGSEiQriO5H25u0gn1Xr2A4cOl\nkVpWVoaNm4iaFSaVxuDUKeCVV6QRWg9CoQAGDgSmTgUmT5auXCciMiAmFXP2yy/A0qXA3r0P1k7f\nvlIimTRJup0tEVEDYVIxR6dPA2+9Bezcee+vVSikiw379AEGDJAef9zdkoiooTGpmIvCQuCbb4B1\n66RzJfciIACIjJQeQ4dyb4SITIZJxdTy8oCVK6Wqv0VFdS/fujXw6KNAt27SnQt79AA4zJeIzAST\niikIId3AauNGac+kPvcd8fcHXnsNiIriCC0iMltMKsZUWipV/H37bWlEV334+gKvvgrMni3drIqI\nyIw1qqSSlpaGnJwcJCQkyNM0JVgUf9SeqnoxT10lWKrPt7CwgPqPaz6sra1hZ2enVfYE0L5gSFMO\n5PLly1Cr1frLlQQFwe/nn/H7ihXwTktDy1riqepu584omjULdx57DH5BQQCAbdu24eLFiwAAW1tb\neHt7o6SkRKvMhKZkTfUSIfdSigSoX8kIcypxYahtMkQ85laKxNziMRfsl4bRqJJKY2Nz7Ro8XngB\nOH8e7eqxvMrKCtnDhsHqySdRHh7e4PERERkay7Q0hNJS4N//Bt54Aygvr3t5a2vgiSeAl1/myC0i\nMgqWaWkMhAA+/xx4/fX63SmxWzdg3jzg8cel8vFERI0ck4qh/PSTNDrr2LHal3N0BMaOBaZPl+5F\nwptYEVETwqTyIO7eBf7zH+CLL4Bz52pfNigI+OAD6f7slux2Imqa+O12vzIygClTgBMnal/OwgJY\nvBhYtky6cJGIqAnjsZd7VVYm1eUKDq47oUyYIJWqf/ttJhQiaha4p1JfajWwaZNUNbja7Yx1hIQA\n774r3aOEiKgZYVKpy+XLwP79wPvvS7/XpkcP6VDX1KnSYS8iomaGSaUm2dnSjazqGs0FAB4eUh2v\nYcMaPi4iIjPGcyr6FBdLlYDrSigWFsCzzwIXLjChEBGhkeyppKWlISkpCampqXKtr7po6m9pVL16\nVFOjq2pdLwcHB9jZ2UHk5mL8F1/A8cKFWtu/0asXKt56C22HDatXDazY2FgAQEhIyH3Xydq2bZtW\nXS8/Pz+d1xmz3pY51U4yp1iImrNGkVSMpc3t2xi6Zg0cMzJqXCajY0ecHj0a1kOHIuSPQo9ERCRh\n7S+NXbuk8vJVKhJrefJJ4JlngC5djBsXEVEDYO2vhrRvHzBxIlBRoTuvZUvg22+BMWOMHxcRUSPT\nvE/UV1YCK1YA48frTyg2NtJwYiYUIqJ6ab57KllZUlHHw4f1z/fwAHbsAHr3Nm5cRESNWPNMKufO\nAQMH1nz+ZPBgYPt2wNXVuHERETVyze9EfUmJtPdRU1Xhfv2kQ15KZcOsn4jIDDTU92zzOqeiUklX\nydeUUJYsAQ4dYkIhIrpPzefwV2UlMH++NNKrOhsbaYTXyJHGj4uIqAlpHklFCOD554GvvtI/PzYW\niIgwbkxERE2Q2SeVmJgYJCcno6CgoF7H/6qXYFEoFBhx/Dh6//CDzrKVCgV+fOIJOAgBjyrl7KuW\n+qirBAtQd4mQplgWhYhInyZ/TiXk3Dm9CQUATkRF4ffwcCNHRETUdDXt0V9HjgAjRgClpbrz3ngD\neO21B18HEVEjxNFf9+q774BBg/QnlKefBl591fgxERE1cXUmle3bt9drmll54QVg0iT98yZOBNas\nARQK48ZERNQM1Hn4Kzw8HImJiXVOM2hQD7JbFhMDjBqlf154uHRIzMbm/oMjImoCjF6lOCYmBvv2\n7UNmZiaeffZZeeVFRUWwsrIyeCAGIQSwbJn+eV27Aj/+yIRCRNSAakwqbdu2RY8ePbBz50706NFD\nTip2dnZ49913jRbgPfnxR+DkSf3zDh0CnJ2NGw8RUTNT5+EvlUol75nk5eUhIyMDXbt2rVfj8+bN\nw969e+Hm5oazZ8/KbUydOhVpaWnw9/fHN998AwcHB+2g7me37O5doFcv4I/1aLlzB2jT5t7aIyJq\nwkw2+mvYsGEoLCxEXl4eevTogSeeeAKLFi2qV+Nz587F/v37taatXLkSw4YNQ3JyMoYOHYqVK1fe\nX+TVvfee/oTy3XdMKERERlJnUsnPz4ednR2+//57zJo1C6dOncLBgwfr1fjAgQPh6OioNW3Xrl2Y\nPXs2AGD27NnYsWPHfYStEyTwr3/pTu/ZU7oBFxERGUWdSUWtViM7OxvffPMNHn30UQDSbtP9un79\nOtzd3QEA7u7uuH79+n23JXvhBeDWLd3p//kPhw4TERlRnbW/Xn/9dYwYMQL9+/dHREQErl69ig4d\nOhhk5QqFotYEFRMTg1OnTul9neZYYO8rVzBy0yadZVIGDcL+M2fgf+sWQkJC5On3UrOrvssQEZGk\nzqQyefJkTJ48WX4eGBiI77777r5X6O7ujpycHHh4eCA7Oxtubm56l4uOjsbly5eRmZkJf39/BAQE\n6CzTQq3GgF27dKZX2tjg3JQp9x0jEVFTExcXh7i4uAZfT52jv9LT0/Hss8/i6NGjAIBBgwZhzZo1\n8Pb2rtcKUlNTMWbMGHn014svvghnZ2e89NJLWLlyJfLz83VO1td7VMKOHfrPmaxdCzzzTL3iIyJq\njkw2+mvu3LkYO3YssrKykJWVhTFjxmDu3Ln1anz69Ono168fLl26BB8fH6xfvx4vv/wyfvzxRwQF\nBSE2NhYvv/zy/Uf/6ae60wYNkmp7ERGR0dW5p9KtWzf89ttvdU4zaFD1yaAXLgChodJV9FXt3y9V\nJiYiohqZbE/F2dkZX331FdRqNSoqKrBp0ya4uLgYPJB79uqrugnFzw8YNsw08RARUd1JZf369fjm\nm2/g4eEBT09PbN++HevXrzdGbDVLSwP++1/d6U8/DbRoutX8iYjMXb2GFG/cuFG+iDEvLw9/+9vf\n8MUXXzR4cDX69FPdvRQvL+D//s808RAREYB67Kn89ttvWlfFOzk5ISEhoUGDqlV+vnQ/lOoWLgRa\ntzZ+PEREJKszqQghkJeXJz/Py8uDWq1u0KBq9c9/AsXF2tOsrIB580wTDxERyeo8/LVkyRL07dsX\nU6ZMgRAC27dvxyuvvGKM2HTdvAm8/77u9HnzAE9P48dDRERa6hxSDADnz59HbGwsFAoFHnroIa2y\nJw0SlEKBrVu34uLFi1rTw8+dw9hvv9WaJiwtobhwAWl/lOfXlFNheRUiopoZ/c6PVYWGhiI0NNTg\nK79X7S9d0plW1r8/WrdvL40IIyIik6rXnoqx6c2gFRWAq6t0or6qH38EHn7YeMERETUBJrv40Wyc\nOKGbUGxtpbIsRERkFhpPUtm3T3fasGFAy5bGj4WIiPRqPElFT4l7jBpl/DiIiKhGjeOcyqVLQHCw\n7oKZmUDbtsYLjIioiWje51RiYnSn9enDhEJEZGYaR1I5dEh32tixxo+DiIhqZf5JRQhp5Fd1HEZM\nRGR2zD+pJCcDubna06ytgbAw08RDREQ1Mv+kou/QV0SEVESSiIjMSr3KtJjCm2++CbVajYnbt6Nz\ntXn5YWEoSEtjXS8iIjNj9nsqntnZOtPK+vY1QSRERFQX875OJStLuqOj9kzg9m3A3t40wRERNQHN\n8zqVn37SndatGxMKEZGZMu+kom8o8ZAhxo+DiIjqxbyTSkKC7rR+/YwfBxER1Yv5JhUhgP/9T3d6\njx7Gj4WIiOrFfJNKdjZw5472NBsbwN/fJOEQEVHdzDepJCfrTuvQQRr9RUREZqlxJZWOHY0fBxER\n1Zv5JpVLl3SnBQUZPw4iIqo3s00ql/Xd6ZF7KkREZs1sk4pDfr7uRCYVIiKzZrZJxbX6yC+AI7+I\niMyc+db+qj7RxgYoKuLoLyIiA2ietb+q8vdnQiEiMnONK6kQEZFZY1IhIiKDYVIhIiKDYVIhIiKD\nYVIhIiKDaTxJpfpthYmIyOw0jutUFAqgvBywtDRVSERETUrzvk7FxYUJhYioEWgcScXT09QREBFR\nPTSOpOLiYuoIiIioHhpHUnF0NHUERERUD40jqTg4mDoCIiKqByYVIiIyGCYVIiIyGCYVIiIyGJNd\n/OHv7w87OztYWFjAysoKp06dqnlhJhUiokbBZElFoVAgLi4OTk5OdS/MpEJE1CiY9PBXvUsEMKkQ\nETUKJksqCoUCDz/8MHr27IlPP/209oV5nQoRUaNgssNfx44dg6enJ27evIlhw4YhODgYAwcOlOdH\nV1k2MikJkaGhRo+RiKipiIuLQ1xcXIOvxyyqFC9btgy2trZYsmQJAD1ViouLARsbk8RGRNQUNakq\nxSUlJSgqKgIA3LlzBwcOHECXLl30L2xpCbRpY8ToiIjofpnk8Nf169cxfvx4AEBFRQUef/xxDB8+\nXP/CDg7S/VSIiMjsmcXhr+q0Dn+1bw9cvmzKcIiImpwmdfjrniiVpo6AiIjqyfyTCs+nEBE1Guaf\nVFq3NnUERERUT+afVLinQkTUaJh/UuGeChFRo8GkQkREBmP+SYWHv4iIGg3zTyrcUyEiajSYVIiI\nyGDMP6lYW5s6AiIiqifzTyotW5o6AiIiqicmFSIiMhgmFSIiMhgmFSIiMhgmFSIiMhgmFSIiMhgm\nFSIiMhgmFSIiMhjzTyqtWpk6AiIiqifzTyrcUyEiajSYVIiIyGCYVIiIyGCYVIiIyGDMP6lYWZk6\nAiIiqifzTyoWFqaOgIiI6olJhYiIDIZJhYiIDIZJhYiIDMb8k0oL8w+RiIgk5v+NzT0VIqJGg0mF\niIgMhkmFiIgMhkmFiIgMhkmFiIgMhkmFiIgMhkmFiIgMhkmFiIgMxryTikIhPYiIqFEw76TCvRQi\nokbFvJMKS7QQETUq5v2tzT0VIqJGhUmFiIgMhkmFiIgMxtLUAdSoZ0/A1tbUURAR0T1QCCGEqYOo\nTqFQwAzDIiJqMhrqe9a8D38REVGjwqRCREQGw6RCREQGw6RCREQGY5Kksn//fgQHB6NDhw5YtWqV\nKUJolOLi4kwdgtlhn+hin+hinxiP0ZOKWq3G008/jf379yMpKQlff/01Lly4YOwwGiX+Yehin+hi\nn+hinxiP0ZPKqVOn0L59e/j7+8PKygrTpk3Dzp07jR0GERE1AKMnlczMTPj4+MjPvb29kZmZaeww\niIioARj9inpFPe6PEhgYWK/lmqNly5aZOgSzwz7RxT7RxT7RFhgY2CDtGj2peHl5IT09XX6enp4O\nb29vrWWuXLli7LCIiMgAjH74q2fPnrh8+TJSU1NRXl6Obdu2YezYscYOg4iIGoDR91QsLS3xwQcf\nYMSIEVCr1Zg/fz46depk7DCIiKgBmGVBSSIiapzM7or65nRhZHp6OoYMGYLQ0FB07twZa9euBQDk\n5eVh2LBhCAoKwvDhw5Gfny+/ZsWKFejQoQOCg4Nx4MABefovv/yCLl26oEOHDnjuueeMvi2Gplar\nER4ejjFjxgBgn+Tn52PSpEno1KkTQkJCcPLkyWbfJytWrEBoaCi6dOmCGTNm4O7du82uT+bNmwd3\nd3d06dJFnmbIPrh79y6mTp2KDh06oE+fPkhLS6s7KGFGKioqRGBgoEhJSRHl5eWiW7duIikpydRh\nNZjs7GyRmJgohBCiqKhIBAUFiaSkJPHCCy+IVatWCSGEWLlypXjppZeEEEKcP39edOvWTZSXl4uU\nlBQRGBgoKisrhRBC9OrVS5w8eVIIIcQjjzwiYmJiTLBFhrN69WoxY8YMMWbMGCGEaPZ9MmvWLPH5\n558LIYRQqVQiPz+/WfdJSkqKCAgIEGVlZUIIIaZMmSI2bNjQ7Prk8OHDIiEhQXTu3FmeZsg++PDD\nD8XChQuFEEJs3bpVTJ06tc6YzCqpHD9+XIwYMUJ+vmLFCrFixQoTRmRcjz32mPjxxx9Fx44dRU5O\njhBCSjwdO3YUQgixfPlysXLlSnn5ESNGiBMnToisrCwRHBwsT//666/FU089ZdzgDSg9PV0MHTpU\nxMbGitGjRwshRLPuk/z8fBEQEKAzvTn3SW5urggKChJ5eXlCpVKJ0aNHiwMHDjTLPklJSdFKKobs\ngxEjRoj4+HghhPTPjIuLS53xmNXhr+Z8YWRqaioSExPRu3dvXL9+He7u7gAAd3d3XL9+HQCQlZWl\nNfxa0z/Vp3t5eTXqflu0aBHeeecdtGjx58ezOfdJSkoKXF1dMXfuXHTv3h1PPvkk7ty506z7xMnJ\nCUuWLIGvry/atm0LBwcHDBs2rFn3iYYh+6Dqd7KlpSXs7e2Rl5dX6/rNKqk01wsei4uLMXHiRKxZ\nswZKpVJrnkKhaFb9smfPHri5uSE8PLzGu9I1tz6pqKhAQkIC/vrXvyIhIQE2NjZYuXKl1jLNrU+u\nXr2K9957D6mpqcjKykJxcTE2bdqktUxz6xN9TNEHZpVU6nNhZFOjUqkwceJEREVFYdy4cQCk/y5y\ncnIAANnZ2XBzcwOg2z8ZGRnw9vaGl5cXMjIytKZ7eXkZcSsM5/jx49i1axcCAgIwffp0xMbGIioq\nqln3ibe3N7y9vdGrVy8AwKRJk5CQkAAPD49m2ydnzpxBv3794OzsDEtLS0yYMAEnTpxo1n2iYYi/\nFc33rpeXF65duwZA+uemoKAATk5Ota7frJJKc7swUgiB+fPnIyQkBM8//7w8fezYsfjyyy8BAF9+\n+aWcbMaOHYutW7eivLwcKSkpuHz5MiIiIuDh4QE7OzucPHkSQgh89dVX8msam+XLlyM9PR0pKSnY\nunUrHnroIXz11VfNuk88PDzg4+OD5ORkAMDBgwcRGhqKMWPGNNs+CQ4ORnx8PEpLSyGEwMGDBxES\nEtKs+0TDEH8rjz32mE5b3377LYYOHVp3APd/eqhh7Nu3TwQFBYnAwECxfPlyU4fToI4cOSIUCoXo\n1q2bCAsLE2FhYSImJkbk5uaKoUOHig4dOohhw4aJ27dvy6956623RGBgoOjYsaPYv3+/PP3MmTOi\nc+fOIjAwUDzzzDOm2ByDi4uLk0d/Nfc++fXXX0XPnj1F165dxfjx40V+fn6z75NVq1aJkJAQ0blz\nZzFr1ixRXl7e7Ppk2rRpwtPTU1hZWQlvb2/xxRdfGLQPysrKxOTJk0X79u1F7969RUpKSp0x8eJH\nIiIyGLM6/EVERI0bkwoRERkMkwoRERkMkwoRERkMkwoRERkMkwoRERkMkwo1Gz///DNOnDhh6jBk\n7733HkpLS+Xnjz76KAoLC00YEdGDY1KhZuOnn37C8ePHjbY+IVUBr3H+mjVrUFJSIj/fu3cv7Ozs\njBEaUYNhUqFGKTU1FcHBwZg5cyZCQkIwefJk+b9+f39/uZLqmTNnMGTIEKSlpWHdunV49913ER4e\njqNHj2q1l5eXh3HjxqFbt27o27cvzp49CwCIjo5GVFQU+vXrh6CgIHz22Wfya9555x1ERESgW7du\niI6OluPq2LEjZs+ejS5duiA9PR1//etf0atXL3Tu3Flebu3atcjKysKQIUPk0hdV4/73v/+NLl26\noEuXLlizZo3cdqdOnbBgwQJ07twZI0aMQFlZmdxeaGgounXrhunTpzdAjxPVk8HqBRAZUUpKilAo\nFOL48eNCCCHmzZsn/vWvfwkhhPD39xe5ublCCCFOnz4tIiMjhRBCREdHi9WrV+tt7+mnnxZvvPGG\nEEKI2NhYERYWJoQQYunSpSIsLEyUlZWJW7duCR8fH5GVlSV++OEHsWDBAiGEEGq1WowePVocPnxY\npKSkiBYtWsg3PBJCiLy8PCGEdBO6yMhIcfbsWZ04qz4/c+aM6NKliygpKRHFxcUiNDRUJCYmipSU\nFGFpaSl+++03IYR0Y6pNmzYJIYRo27atKC8vF0IIUVBQ8EB9S/QguKdCjZaPjw/69u0LAJg5c6bO\n3oc+oobDUceOHUNUVBQAYMiQIcjNzUVRUREUCgUee+wxtGrVCs7OzhgyZAhOnTqFAwcO4MCBAwgP\nD0ePHj1w6dIlXLlyBQDg5+eHiIgIue1t27ahR48e6N69O86fP4+kpKRa4zt69CgmTJiA1q1bw8bG\nBhMmTMCRI0egUCgQEBCArl27AgB69OiB1NRUAEDXrl0xY8YMbN68GRYWFnV3HlEDsTR1AET3q+p9\nIoQQ8nNLS0tUVlYCgHx4qD5qSjg1rffvf/87FixYoDUvNTUVNjY28vOUlBSsXr0aZ86cgb29PebO\nnVtnTAqFQiuWqtvWqlUrebqFhYV8yG/v3r04fPgwdu/ejbfeegtnz55lciGT4J4KNVrXrl1DfHw8\nAGDLli0YOHAgAOncxJkzZwAA3333nby8UqlEUVGR3rYGDhyIzZs3AwDi4uLg6uoKpVIJIQR27tyJ\nu3fvIjc3F3FxcYiIiMCIESPwxRdf4M6dOwCkO+TdvHlTp93CwkLY2NjAzs4O169fR0xMjFY81Ud7\nKRQKDBw4EDt27EBpaSnu3LmDHTt2YODAgTUmPSEErl27hsjISKxcuRIFBQVyXETGxj0VarQ6duyI\nDz/8EPPmzUNoaCgWLlwIAFi6dCnmz58POzs7REZGyv/ljxkzBpMmTcLOnTvxwQcfoH///nJb0dHR\nmDdvHrp16wYbGxv5HhIKhQJdu3bFkCFDcOvWLbz++uvw8PCAh4cHLly4IB9+UyqV2LRpk86d9rp1\n64bw8HAEBwfDx8cHAwYMkOctWLAAI0eOhJeXFw4dOiRPDw8Px5w5c+RDaE8++SS6deuG1NRUnbv4\nKRQKqNVqREVFoaCgAEIIPPfccxxFRibD0vfUKKWmpmLMmDHyKK2GsmzZMtja2mLJkiUNuh6ipoKH\nv6jRMta9t5v7fc6J7gX3VIiIyGC4p0JERAbDpEJERAbDpEJERAbDpEJERAbDpEJERAbz/9Y8cIxs\n+5zFAAAAAElFTkSuQmCC\n",
"text": "<matplotlib.figure.Figure at 0xb238cf8>"
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": "Red-Black Trees: plot of black_height as keys are added in descending order"
},
{
"cell_type": "code",
"collapsed": false,
"input": "from redblacktrees2 import RedBlackBST\ntrials = 10000\nmaxval = 20\ntitle = \"red black trees - descending order (black_height)\"\nr = RedBlackBST(trials, maxval, title)\n\nkeys = range(trials, 0, -1)\n\nfor k in keys:\n r.put(k, k)\n \nprint r.size(), \"max value = \", r.a.vals[trials - 1], \"max mean = \", r.a.means[trials - 1]\nr.a.plotData()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "10000 max value = 12.0 max mean = 10.3644\n"
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": "<matplotlib.figure.Figure at 0xa8656d8>"
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment