Skip to content

Instantly share code, notes, and snippets.

@steven-tey
Last active October 9, 2019 16:21
Show Gist options
  • Save steven-tey/83292bb812c0a54f42daa1363104de49 to your computer and use it in GitHub Desktop.
Save steven-tey/83292bb812c0a54f42daa1363104de49 to your computer and use it in GitHub Desktop.
CS110 Session 5.2 Pre-Class Work
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before you turn this problem in, make sure everything runs as expected. First, **restart the kernel** (in the menubar, select Kernel$\\rightarrow$Restart) and then **run all cells** (in the menubar, select Cell$\\rightarrow$Run All).\n",
"\n",
"Make sure you fill in any place that says `YOUR CODE HERE` or \"YOUR ANSWER HERE\", as well as your name and collaborators below:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"NAME = Steven Tey\n",
"COLLABORATORS = \"\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "1a4c3cfc3c34bf644ee45d91835b6f70",
"grade": false,
"grade_id": "cell-61b183447ded09ef",
"locked": true,
"schema_version": 1,
"solution": false
}
},
"source": [
"# CS110 Pre-class Work 5.2\n",
"\n",
"## Question 1.\n",
"Using Figure 7.1 in Cormen et al. as a model, perform manually the partition process on the following list: A = [1,5,6,2,3,8,9,4,7]. You just need to specify the followings:\n",
"1. The array after the process is done.\n",
"2. The value of $i$ after the process is done."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "06dce98d07f8f042785a795b32e7ef75",
"grade": true,
"grade_id": "cell-7aa520f8af13679b",
"locked": false,
"points": 0,
"schema_version": 1,
"solution": true
}
},
"source": [
"``[1,5,6,2,3,8,9,4,7]``\n",
"\n",
"First, compare the first value to the last value, which is our pivot value. If the first value is larger than the last value, switch the two values. In this case, the first value is smaller than the last value, so we proceed to the next step.\n",
"\n",
"Now, we compare the second value to our pivot value. 5 is smaller than 7, so we move on to the third value and compare that to our pivot value again. 6 is smaller than 7, so we move on. The next two values, 5 and 3, are both smaller than 7, so no swaps happen. Our list is still the same as it is before.\n",
"\n",
"``[1,5,6,2,3,8,9,4,7]``\n",
"\n",
"Now, we compare 8 to our pivot value. Since 8 is bigger than 7, we group that under the elements to the right of the partition. We then move on to 9, which is also bigger than 7, thus we add that to the right group as well. 4, however, is smaller than 7, and therefore we have to swap 8 with 4\n",
"\n",
"``[1,5,6,2,3,4,9,8,7]``\n",
"\n",
"Finally, we swap 9 with 7 to get the final array after the partition process.\n",
"\n",
"``[1,5,6,2,3,4,7,8,9]``\n",
"\n",
"The value of $i$, in this case, is 5, since our pivot value is currently in the position of $i + 1 = 6$ in the array."
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "21059776e9083caf84e8abb5b6fb893e",
"grade": false,
"grade_id": "cell-6c0a9dfd6980c336",
"locked": true,
"schema_version": 1,
"solution": false
}
},
"source": [
"## Question 2.\n",
"Code up a Python implementation of `partition(A, p, r)`, closely follow the pseudo-code in Cormen et al., p.172. Your function should return the index of the pivot in the array."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "395997ac94ed1416c67b22f7977c07a5",
"grade": false,
"grade_id": "cell-1ceb2600756c60ff",
"locked": false,
"schema_version": 1,
"solution": true
}
},
"outputs": [],
"source": [
"def partition(A,p,r):\n",
" \"\"\"\n",
" Assume r<len(A) and p>=0\n",
" \"\"\"\n",
" x = A[r]\n",
" i = p-1\n",
" for j in range(p, r):\n",
" if A[j] <= x:\n",
" i += 1\n",
" A[i], A[j] = A[j], A[i]\n",
" A[i+1], A[r] = A[r], A[i+1]\n",
" return i+1"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "34aa315313b6f9d8de8efe0922e5b563",
"grade": true,
"grade_id": "cell-a57b60117a7b82fb",
"locked": true,
"points": 1,
"schema_version": 1,
"solution": false
}
},
"outputs": [],
"source": [
"A = [1,5,6,2,3,8,9,4,7]\n",
"assert(partition(A, 0, len(A)-1)==6)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "3496e310776eba92a8290d114db627cd",
"grade": false,
"grade_id": "cell-cd490c45f6733522",
"locked": true,
"schema_version": 1,
"solution": false
}
},
"source": [
"## Question 3.\n",
"\n",
"Code up your own Python implementation of `quicksort(A, p, r)`, using `partition(A,p,r)`."
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "7e40c51fd1bd31c790aa0dd8abde1fb7",
"grade": false,
"grade_id": "cell-8c39ebb8cd1aa83a",
"locked": false,
"schema_version": 1,
"solution": true
}
},
"outputs": [],
"source": [
"def quick_sort(A,p,r):\n",
" if p < r:\n",
" q = partition(A,p,r)\n",
" quick_sort(A,p,q-1)\n",
" quick_sort(A,q+1,r)\n",
" return A # Important step - the algorithm wouldn't return anything without this command"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "80923d1142f0ef958a616db1105a8c1a",
"grade": true,
"grade_id": "cell-4f822430efd456ee",
"locked": true,
"points": 1,
"schema_version": 1,
"solution": false
}
},
"outputs": [],
"source": [
"A = [0]\n",
"assert(quick_sort(A, 0, 0) == [0])\n",
"A = [3,1,2]\n",
"assert(quick_sort(A, 0, 2) == [1,2,3])"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"checksum": "741cfe874ccaef343713f81ec963360c",
"grade": false,
"grade_id": "cell-53941fba9302c591",
"locked": true,
"schema_version": 1,
"solution": false
}
},
"source": [
"## Question 4. \n",
"Explain (using experimental plots) the running time of `quick_sort` when: \n",
"1. all elements of array A have the same value (e.g., [1,1,1])?\n",
"2. array A contains distinct elements sorted in decreasing order (e.g., [5,4,2,1])?\n"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"deletable": false,
"nbgrader": {
"checksum": "f5ddaf0e684d72d229df078b18f321f8",
"grade": true,
"grade_id": "cell-b58035dd5fa02329",
"locked": false,
"points": 0,
"schema_version": 1,
"solution": true
}
},
"outputs": [
{
"data": {
"image/png": "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1izuvffe7/3MoqIiYmNjO5+HhYV1fn///ffT2NjI448/zg033MDatWsBaG5uJicnB8MwaG9v5w9/+AMrVqygra2NpKQkFi5cSHBwcFf/uURE5Cdo2puIiPQaubm5rFq1iuzsbJYuXcqaNWs6x9atW8d7773H9u3bqamp4emnnz7iv5Wens4NN9zAr371K7Kysn4UfADmz5/PnDlzmDhxIrfffjtffPHFT/5bCxcuJCsriw0bNjB06FAefPBBAB577DECAgL45ptvyMrKIjk5mfvuu+8E/gIiInIiFH5ERKTXuPzyy3F3d8fX15f09HRyc3M7xy677DICAgJwd3fnf/7nf1i+fPkJ/7wrrriCoqIi5s2bB8BFF13EY489dtjX33jjjURFRfGHP/wBgHfffZdFixaRnp5Oeno6r7/+Onl5eSdcl4iIHB9NexMRkV7Dx8en83t3d3ccDsdhX2uz2QDw8PCgo6Ojc7vdbicgIOCYf2ZISAizZs1i1qxZjB07lkceeYQ777zzR6976KGHKCkp4YMPPujcZhgGL7zwAmecccYx/zwREek6uvIjIiJ9wltvvUVTUxMdHR28+OKLnHXWWQAMGTKEdevWAVBdXc3HH3/c+Z7AwEDq6uoO+29+8MEHnQ0ODMNg8+bNDBky5Eeve+WVV3j33Xd566238PA49P8rXnjhhSxYsKDz32hubmb79u0n/suKiMhxUfgREZE+4fTTT2fmzJkkJycTEhLCLbfcAsD1119PeXk5qampXHvttYwfP77zPRdffDEbNmwgPT298z6d7/riiy8YPXo0qamppKamsnfvXp577rkfve6+++6jpqaGiRMndk5xA/OeofT0dMaPH8+oUaPIzMwkKyuri/4CIiJyNDbDMAyrixARETkRP+zoJiIi8lN05UdERERERFyCrvyIiIiIiIhL0JUfERERERFxCQo/IiIiIiLiEhR+RERERETEJSj8iIiIiIiIS1D4ERERERERl6DwIyIiIiIiLkHhR0REREREXML/ByDPjFMZ/DlwAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 960x720 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"c = [] # Counter to store the number of steps every time the algorithm runs\n",
"\n",
"def partition(A,p,r):\n",
" x = A[r]\n",
" c.append(1)\n",
" i = p-1\n",
" c.append(1)\n",
" for j in range(p, r):\n",
" c.append(1)\n",
" if A[j] <= x:\n",
" i += 1\n",
" c.append(1)\n",
" A[i], A[j] = A[j], A[i]\n",
" c.append(1) # This exchange counts as two steps\n",
" c.append(1)\n",
" A[i+1], A[r] = A[r], A[i+1]\n",
" c.append(1)\n",
" c.append(1)\n",
" return i+1\n",
" c.append(1)\n",
"\n",
"\n",
"def quick_sort(A,p,r):\n",
" if p < r:\n",
" q = partition(A,p,r)\n",
" c.append(1)\n",
" quick_sort(A,p,q-1)\n",
" c.append(1)\n",
" quick_sort(A,q+1,r)\n",
" c.append(1)\n",
" return A \n",
" c.append(1)\n",
"\n",
"same_steps = []\n",
"descending_steps = []\n",
"\n",
"for elements in range(1000):\n",
" A_same = np.ones(elements)\n",
" quick_sort(A_same,0,len(A_same)-1)\n",
" same_steps.append(len(c))\n",
" c.clear() # Resetting the counter\n",
" \n",
" A_descending = list(reversed(range(elements)))\n",
" quick_sort(A_descending,0,len(A_descending)-1)\n",
" descending_steps.append(len(c))\n",
" c.clear()\n",
" \n",
"plt.figure(num=None, figsize=(12, 9), dpi=80, facecolor='w', edgecolor='k')\n",
"plt.plot(range(1, 1001), same_steps, label = \"List of the same numbers\")\n",
"plt.plot(range(1, 1001), descending_steps, label = \"List of Descending Numbers\")\n",
"plt.xlabel(\"Input Size\")\n",
"plt.ylabel(\"Number of Steps\")\n",
"plt.legend()\n",
"plt.title(\"Graph of the Number of Steps that Quicksort() takes to Sort Two Types of Lists of Varying Input Sizes\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we can see from the graph above, as the input size increases, the number of steps for that the ``quicksort()`` algorithm takes to sort lists of the same numbers increases exponentially but at a much faster rate than the number of steps it takes to sort lists of descending numbers. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment