Created
March 19, 2020 08:18
-
-
Save BSCdfdff/f9e5634861b5e2ef0fde0291ca8df8f2 to your computer and use it in GitHub Desktop.
Array Binary Search
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Array ADT\n", | |
| "\n", | |
| "+ Binary Search" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Binary Search\n", | |
| "\n", | |
| "___\n", | |
| "\n", | |
| "Size = 15\n", | |
| "\n", | |
| "Length = 15\n", | |
| "\n", | |
| "How to read the table:\n", | |
| "\n", | |
| "1. First row contains the value(s)\n", | |
| "2. Second row contains the index\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "The table must be be sorted.\n", | |
| "\n", | |
| "The value we search for we call key=5.\n", | |
| "\n", | |
| "Why is it called binary search? It will check for a key element in the middle of sorted list. That is it will split the list into 2.\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "___\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Search for key element 18 (Succesful)\n", | |
| "\n", | |
| "___\n", | |
| "\n", | |
| "We will need three index variables:\n", | |
| "\n", | |
| "l = low = lowest index\n", | |
| "\n", | |
| "h=high = highest index\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$$$\n", | |
| "\n", | |
| "m= mid = low + hight divided by 2 (and we take the floor value)\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "$$$$\n", | |
| "\n", | |
| "Is the $\\text {key}=18$ equal to $mid$? No.\n", | |
| "\n", | |
| "Is $\\text {key}=18$ larger of or less than $\\text {index}= 7 = 27$ ?\n", | |
| "\n", | |
| "It is less than $27$, so we set the higher index, $h$ to $mid - 1$, which is equal to $\\text {index } 6$. And $l$ remains at 0.\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&_h\\T&_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$$$\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline\n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&_{mid}\\T&\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$$$\n", | |
| "\n", | |
| "Is the $\\text {key}=18$ equal to $mid$? No.\n", | |
| "\n", | |
| "Is $\\text {key}=18$ larger of or less than $\\text {index}= 3 = 15$ ?\n", | |
| "\n", | |
| "It is greater than $15$, so we set the lower index, $l$ to $mid + 1$, which is equal to $\\text {index } 4$. And $h$ remains at $6$.\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&_{mid}\\T&_l\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline\n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "4\\T&6\\T&{(4+6)\\over 2}\\T&5 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&_l\\T&_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "N\n", | |
| "\n", | |
| "$$$$\n", | |
| "\n", | |
| "Is the $\\text {key}=18$ equal to $mid$? No.\n", | |
| "\n", | |
| "Is $\\text {key}=18$ larger of or less than $\\text {index}= 5 = 21$ ?\n", | |
| "\n", | |
| "It is less than $21$, so we set the higher index, $h$ to $mid -1$, which is equal to $\\text {index } 4$. And $l$ remains at $4$.\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&_l + _h\\T&_{mid}\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "Now high and low is on index $4$, value $18$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline\n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "4\\T&6\\T&{(4+6)\\over 2}\\T&5 \\\\\\hline \n", | |
| "4\\T&4\\T&{(4+4)\\over 2}\\T&4 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&_l/_h/_{mid}\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "Is the $\\text {key}=18$ equal to $mid$? \n", | |
| "\n", | |
| "Yes element found at index $4$.\n", | |
| "\n", | |
| "\n", | |
| "How many comparison's done? Four.\n", | |
| "\n", | |
| "With linear search we found the element in Five\n", | |
| "\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Search for key element 34 (Succesful)\n", | |
| "\n", | |
| "___\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_l\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "8\\T&14\\T&{(8+14)\\over 2}\\T&11 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_l\\T&\\T&\\T&_{mid}\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_l\\T&\\T&_h\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "8\\T&10\\T&{(8+10)\\over 2}\\T&9 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_l\\T&_{mid}\\T&_h\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "Mid = index 10 = 34. Found\n", | |
| "\n", | |
| "Number of searches: $4$\n", | |
| "Number of linear searches :$11$" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Search for key element 25 (Unsuccesful)\n", | |
| "\n", | |
| "___\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T&_h \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&\\T&\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "_l\\T&\\T&\\T&_{mid}\\T&\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&_l\\T&\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "4\\T&6\\T&{(4+6)\\over 2}\\T&5 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&_l\\T&_{mid}\\T&_h\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&_h/_l\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "l\\T&h\\T&{(l+h)\\over 2} \\T&\\text {mid} \\\\\\hline \n", | |
| "0\\T&14\\T&{(0+14)\\over 2}\\T&7 \\\\\\hline \n", | |
| "0\\T&6\\T&{(0+6)\\over 2}\\T&3 \\\\\\hline \n", | |
| "4\\T&6\\T&{(4+6)\\over 2}\\T&5 \\\\\\hline \n", | |
| "6\\T&6\\T&{(6+6)\\over 2}\\T&6 \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&_h/_l/_{mid}\\T&\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\T&\\T&\\T&\\T&\\T&\\T&_h\\T&_l\\T&\\T&\\T&\\T&\\T&\\T&\\T& \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n", | |
| "\n", | |
| "Here we stop as $l$ becomes greater than $h$\n", | |
| "\n", | |
| "\n", | |
| "It took 4 comparisons, we do not count the last one." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Coding Example\n", | |
| "\n", | |
| "$$\n", | |
| "\\newcommand\\T{\\Rule{0pt}{1em}{.3em}}\n", | |
| "\\begin{array}{|r|r|r|r|r|r|r|r|r|r|r|r|r|r|}\n", | |
| "\\hline \n", | |
| "4\\T&8\\T&10\\T&15\\T&18\\T&21\\T&24\\T&27\\T&29\\T&33\\T&34\\T&37\\T&39\\T&41\\T&43 \\\\\\hline \n", | |
| "_0\\T&_1\\T&_2\\T&_3\\T&_4\\T&_5\\T&_6\\T&_7\\T&_8\\T&_9\\T&_{10}\\T&_{11}\\T&_{12}\\T&_{13}\\T&_{14} \\\\\\hline \n", | |
| "\\end{array}\n", | |
| "$$\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "#include <iostream>\n", | |
| "#include <climits>\n", | |
| "#include <math.h>\n", | |
| "using namespace std;" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "class Array{\n", | |
| "private:\n", | |
| " int *A;\n", | |
| " int size;\n", | |
| " int length;\n", | |
| "public:\n", | |
| " Array(){\n", | |
| " size=10;\n", | |
| " A=new int[10];\n", | |
| " length = 0;\n", | |
| " \n", | |
| " }\n", | |
| " Array(int sz){\n", | |
| " size=sz;\n", | |
| " A=new int[sz];\n", | |
| " length = 0;\n", | |
| " \n", | |
| " }\n", | |
| " ~Array(){\n", | |
| " delete []A;\n", | |
| " }\n", | |
| " void Display();\n", | |
| " void Insert (int index, int x);\n", | |
| " int BinarySearch(int key);\n", | |
| " int BinarySearchRecursive(int l, int h, int key);\n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "int Array::BinarySearch(int key){\n", | |
| " int mid; \n", | |
| " int l = 0;\n", | |
| " int h = length-1; \n", | |
| " while (l<=h){ \n", | |
| " mid = (l+h)/2;\n", | |
| " if(key==A[mid])\n", | |
| " return mid;\n", | |
| " else if (key<A[mid])\n", | |
| " h = mid-1;\n", | |
| " else\n", | |
| " l = mid+1;\n", | |
| " }\n", | |
| " return -1; \n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## This is an example of Tail Recursion\n", | |
| "\n", | |
| "As we know where we have tail recursion, its better to choose the loop." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "int Array::BinarySearchRecursive(int l, int h, int key){\n", | |
| " int mid; \n", | |
| " \n", | |
| " if (l<=h){ \n", | |
| " mid = (l+h)/2;\n", | |
| " if(key==A[mid])\n", | |
| " return mid;\n", | |
| " else if (key<A[mid])\n", | |
| " return BinarySearchRecursive(l,mid-1,key);\n", | |
| " else\n", | |
| " return BinarySearchRecursive(mid+1,h,key);\n", | |
| " }\n", | |
| " return -1; \n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "void Array::Insert(int index, int x){\n", | |
| " if (index>=0 && index<=length){\n", | |
| " for(int i=length-1;i>=index;i--)\n", | |
| " A[i+1]=A[i];\n", | |
| " A[index]=x;\n", | |
| " length++; \n", | |
| " }\n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "void Array::Display(){\n", | |
| " for(int i=0; i<length;i++)\n", | |
| " cout<<A[i]<<\" \"; \n", | |
| " cout<<endl; \n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "Array arr(14);\n", | |
| "arr.Insert(0,4);\n", | |
| "arr.Insert(1,8);\n", | |
| "arr.Insert(2,10);\n", | |
| "arr.Insert(3,15);\n", | |
| "arr.Insert(4,18);\n", | |
| "arr.Insert(5,21);\n", | |
| "arr.Insert(6,24);\n", | |
| "arr.Insert(7,27);\n", | |
| "arr.Insert(8,29);\n", | |
| "arr.Insert(9,33);\n", | |
| "arr.Insert(10,34);\n", | |
| "arr.Insert(11,37);\n", | |
| "arr.Insert(12,39);\n", | |
| "arr.Insert(13,41);\n", | |
| "arr.Insert(14,43);\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "4 8 10 15 18 21 24 27 29 33 34 37 39 41 43 \n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "arr.Display();" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "//cout<<arr.LinearSearch(5)<<endl;" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Pointer is not at the beginning, so either do normal Binsearch or Recursive cant do both" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "10\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "//cout<<arr.BinarySearch(34)<<endl;" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "cout<<arr.BinarySearchRecursive(0,14,34)<<endl;" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "C++17", | |
| "language": "C++17", | |
| "name": "xcpp17" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": "text/x-c++src", | |
| "file_extension": ".cpp", | |
| "mimetype": "text/x-c++src", | |
| "name": "c++", | |
| "version": "-std=c++17" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment