34
Binary Search CS16: Introduction to Data Structures & Algorithms Spring 2020

Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary SearchCS16: Introduction to Data Structures & Algorithms

Spring 2020

Page 2: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Outline‣ Binary search

‣ Pseudo-code

‣ Analysis

‣ In-place binary search

‣ Iterative binary search

Page 3: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

3

Page 4: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Phonebook Search

42 minActivity #1

Page 5: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Phonebook Search

52 minActivity #1

Page 6: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Phonebook Search

61 minActivity #1

Page 7: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Phonebook Search

70 minActivity #1

Page 8: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

The Problem

‣ Is an item x in a sorted array?‣ ex: is 5 in the array above?

‣ Idea #0‣ scan array to find x‣ O(n) running time

‣ Can we do better?8

1 1 3 4 7 8 10 10 12 18 19 21 23 23 24

Let’s use the fact that array is

sorted…

Page 9: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

The Problem

‣ Observation #1‣ we can stop searching for 11 if we reach 12‣ we can stop searching for x if we reach y > x

‣ Why?‣ since array is sorted, 11 can’t be after 12‣ since array is sorted, x can’t be after y

‣ But what if we’re looking for 25?9

1 1 3 4 7 8 10 10 12 18 19 21 23 23 24

Page 10: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

The Problem

‣ Observation #1‣ we can stop searching for x if we reach y > x

‣ Observation #2‣ what happens if we compare x to middle element?‣ if x = mid, then we found x‣ if x < mid, then x cannot be in right half of array‣ if x > mid, then x cannot be in left half of array

10

1 1 3 4 7 8 10 10 12 18 19 21 23 23 24

mid

Page 11: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

The Problem

‣ Using observation #2‣ We got rid of half the array!

‣ What if do it again? ‣ same problem…but half the size!

‣ Does this remind you of something?

11

1 1 3 4 7 8 10 10 12 18 19 21 23 23 24

Page 12: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

The Problem

12

1 1 3 4 7 8 10 10 12 18 19 21 23 23 24

Find 5

5 < 10

1 1 3 4 7 8 10

5 > 4

7 8 10

5 < 8

7 How many comparisons?

Page 13: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Analysis‣ How many comparisons on array of size n?‣ after each comparison we cut array in half

‣ how many times can we split array in 2 before we get array of size 1?‣ if n=2k for some k, then log2(n)=k

‣ So what is runtime of binary search?‣ O(log n)?

‣ Let’s look at pseudo-code!13

Page 14: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Pseudo-Code

14

function binarysearch(A,x):if A.size == 0:

return falseif A.size == 1:

return A[0] == x

mid = A.size / 2

if x == A[mid]:return true

if x > A[mid]:return binarysearch(A[mid+1…end], x)

if x < A[mid]:return binarysearch(A[0…mid-1], x)

Assume A.size is power of 2

Page 15: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Analysis‣ Binary search implementation is recursive…‣ So how do we analyze it?‣ write down the recurrence relation‣ use plug & chug to make a guess‣ prove our guess is correct with induction

15

Page 16: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Analysis‣ What is the recurrence relation of Binary Search?‣

‣ where f(n) is the work done at each level of recursion

‣ Where does T(n/2) come from?‣ because we cut problem in half at each level of

recursion

‣ Why is base case T(1) = c?

‣ What is f(n)?

16

T (n) = T (n/2) + f(n),with T (1) = c

Page 17: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Pseudo-Code

17

function binarysearch(A,x):if A.size == 0:

return falseif A.size == 1:

return A[0] == x

mid = A.size / 2

if x == A[mid]:return true

if x > A[mid]:return binarysearch(A[mid+1…end], x)

if x < A[mid]:return binarysearch(A[0…mid-1], x)

O(1)

O(1)

O(1)

O(1)

O(1)

O(1)

O(1)

O(1)

O(1)copying half the array…

is O(n)!!

Page 18: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Analysis‣ Recurrence relation:

‣ Plug and chug:

18

linear

converges to 2n as n gets largeWhat is T(n)?

T (4) = T (2) + 4c1 + c2 = c0 + (4 + 2)c1 + 2c2<latexit sha1_base64="k1msUsFpBDL1HIYoASCDRPfceKU=">AAACJXicbVBNS8MwGE79nPNr6tFLcAgdg9GWgnoYDL14nLC5wVZKmmZbWJqWJBVG2a/x4l/x4mGK4Mm/YtbtoJsvhDw8z/O+efMECaNSWdaXsbG5tb2zW9gr7h8cHh2XTk4fZZwKTNo4ZrHoBkgSRjlpK6oY6SaCoChgpBOM7+Z654kISWPeUpOEeBEacjqgGClN+aV6y3QrsA5bplOBVehi39YX9h3N9fPxmSDhNMO+pXnTrTqVhcXRnqlfKls1Ky+4DuwlKINlNf3SrB/GOI0IV5ghKXu2lSgvQ0JRzMi02E8lSRAeoyHpachRRKSX5XtM4aVmQjiIhT5cwZz93ZGhSMpJFGhnhNRIrmpz8j+tl6rBtZdRnqSKcLx4aJAyqGI4zwyGVBCs2EQDhAXVu0I8QgJhpZMt6hDs1S+vg7ZTu6lZD265cbtMowDOwQUwgQ2uQAPcgyZoAwyewSuYgXfjxXgzPozPhXXDWPacgT9lfP8Azg+e5A==</latexit><latexit sha1_base64="k1msUsFpBDL1HIYoASCDRPfceKU=">AAACJXicbVBNS8MwGE79nPNr6tFLcAgdg9GWgnoYDL14nLC5wVZKmmZbWJqWJBVG2a/x4l/x4mGK4Mm/YtbtoJsvhDw8z/O+efMECaNSWdaXsbG5tb2zW9gr7h8cHh2XTk4fZZwKTNo4ZrHoBkgSRjlpK6oY6SaCoChgpBOM7+Z654kISWPeUpOEeBEacjqgGClN+aV6y3QrsA5bplOBVehi39YX9h3N9fPxmSDhNMO+pXnTrTqVhcXRnqlfKls1Ky+4DuwlKINlNf3SrB/GOI0IV5ghKXu2lSgvQ0JRzMi02E8lSRAeoyHpachRRKSX5XtM4aVmQjiIhT5cwZz93ZGhSMpJFGhnhNRIrmpz8j+tl6rBtZdRnqSKcLx4aJAyqGI4zwyGVBCs2EQDhAXVu0I8QgJhpZMt6hDs1S+vg7ZTu6lZD265cbtMowDOwQUwgQ2uQAPcgyZoAwyewSuYgXfjxXgzPozPhXXDWPacgT9lfP8Azg+e5A==</latexit><latexit sha1_base64="k1msUsFpBDL1HIYoASCDRPfceKU=">AAACJXicbVBNS8MwGE79nPNr6tFLcAgdg9GWgnoYDL14nLC5wVZKmmZbWJqWJBVG2a/x4l/x4mGK4Mm/YtbtoJsvhDw8z/O+efMECaNSWdaXsbG5tb2zW9gr7h8cHh2XTk4fZZwKTNo4ZrHoBkgSRjlpK6oY6SaCoChgpBOM7+Z654kISWPeUpOEeBEacjqgGClN+aV6y3QrsA5bplOBVehi39YX9h3N9fPxmSDhNMO+pXnTrTqVhcXRnqlfKls1Ky+4DuwlKINlNf3SrB/GOI0IV5ghKXu2lSgvQ0JRzMi02E8lSRAeoyHpachRRKSX5XtM4aVmQjiIhT5cwZz93ZGhSMpJFGhnhNRIrmpz8j+tl6rBtZdRnqSKcLx4aJAyqGI4zwyGVBCs2EQDhAXVu0I8QgJhpZMt6hDs1S+vg7ZTu6lZD265cbtMowDOwQUwgQ2uQAPcgyZoAwyewSuYgXfjxXgzPozPhXXDWPacgT9lfP8Azg+e5A==</latexit>

T (2) = T (1) + 2c1 + c2 = c0 + 2c1 + c2<latexit sha1_base64="zTarZVZCAugccqWxBGIqfBkxWAY=">AAACIHicbVDLSsNAFJ3UV62vqEs3g0VoEUoSBOtCKLpxWaGxhTaEyWTSDp08mJkIJeRX3Pgrblyo6E6/xmnahW09MMzhnHvv3DlewqiQhvGtldbWNza3ytuVnd29/QP98OhBxCnHxMYxi3nPQ4IwGhFbUslIL+EEhR4jXW98O/W7j4QLGkcdOUmIE6JhRAOKkVSSqzc7NasOr2GnZtbhObSwa6oLu5bSBsX4jBM/z7BrLNi5q1eNhlEArhJzTqpgjrarfw38GKchiSRmSIi+aSTSyRCXFDOSVwapIAnCYzQkfUUjFBLhZMUKOTxTig+DmKsTSViofzsyFAoxCT1VGSI5EsveVPzP66cyaDoZjZJUkgjPHgpSBmUMp3FBn3KCJZsogjCnaleIR4gjLFWoFRWCufzlVWJbjauGcX9Rbd3M0yiDE3AKasAEl6AF7kAb2ACDJ/AC3sC79qy9ah/a56y0pM17jsECtJ9fbD2dyw==</latexit><latexit sha1_base64="zTarZVZCAugccqWxBGIqfBkxWAY=">AAACIHicbVDLSsNAFJ3UV62vqEs3g0VoEUoSBOtCKLpxWaGxhTaEyWTSDp08mJkIJeRX3Pgrblyo6E6/xmnahW09MMzhnHvv3DlewqiQhvGtldbWNza3ytuVnd29/QP98OhBxCnHxMYxi3nPQ4IwGhFbUslIL+EEhR4jXW98O/W7j4QLGkcdOUmIE6JhRAOKkVSSqzc7NasOr2GnZtbhObSwa6oLu5bSBsX4jBM/z7BrLNi5q1eNhlEArhJzTqpgjrarfw38GKchiSRmSIi+aSTSyRCXFDOSVwapIAnCYzQkfUUjFBLhZMUKOTxTig+DmKsTSViofzsyFAoxCT1VGSI5EsveVPzP66cyaDoZjZJUkgjPHgpSBmUMp3FBn3KCJZsogjCnaleIR4gjLFWoFRWCufzlVWJbjauGcX9Rbd3M0yiDE3AKasAEl6AF7kAb2ACDJ/AC3sC79qy9ah/a56y0pM17jsECtJ9fbD2dyw==</latexit><latexit sha1_base64="zTarZVZCAugccqWxBGIqfBkxWAY=">AAACIHicbVDLSsNAFJ3UV62vqEs3g0VoEUoSBOtCKLpxWaGxhTaEyWTSDp08mJkIJeRX3Pgrblyo6E6/xmnahW09MMzhnHvv3DlewqiQhvGtldbWNza3ytuVnd29/QP98OhBxCnHxMYxi3nPQ4IwGhFbUslIL+EEhR4jXW98O/W7j4QLGkcdOUmIE6JhRAOKkVSSqzc7NasOr2GnZtbhObSwa6oLu5bSBsX4jBM/z7BrLNi5q1eNhlEArhJzTqpgjrarfw38GKchiSRmSIi+aSTSyRCXFDOSVwapIAnCYzQkfUUjFBLhZMUKOTxTig+DmKsTSViofzsyFAoxCT1VGSI5EsveVPzP66cyaDoZjZJUkgjPHgpSBmUMp3FBn3KCJZsogjCnaleIR4gjLFWoFRWCufzlVWJbjauGcX9Rbd3M0yiDE3AKasAEl6AF7kAb2ACDJ/AC3sC79qy9ah/a56y0pM17jsECtJ9fbD2dyw==</latexit>

T (8) = T (4) + 8c1 + c2 = c0 + (8 + 4 + 2)c1 + 3c2<latexit sha1_base64="07vfNwIzhXcJX9yzAwN2AHsXIaU=">AAACJ3icbVDLSgMxFM34rPU16tJNsAhTCmWmFhwXYtGNywodW2jLkEnTNjTzIMkIZZjPceOvuBFR0aV/YjqdhbZeCDmcc+7NzfEiRoU0zS9tZXVtfWOzsFXc3tnd29cPDu9FGHNMHByykHc8JAijAXEklYx0Ik6Q7zHS9iY3M739QLigYdCS04j0fTQK6JBiJBXl6lctwy7DS9gy6mVYgTZ2LXVht6a4XjY+4WSQJtg1FW/YlXqlVp6bzpQrdfWSWTWzgsvAykEJ5NV09dfeIMSxTwKJGRKia5mR7CeIS4oZSYu9WJAI4Qkaka6CAfKJ6CfZJik8VcwADkOuTiBhxv7uSJAvxNT3lNNHciwWtRn5n9aN5dDuJzSIYkkCPH9oGDMoQzhLDQ4oJ1iyqQIIc6p2hXiMOMJSZVtUIViLX14GTq16UTXv6qXGdZ5GARyDE2AAC5yDBrgFTeAADB7BM3gD79qT9qJ9aJ9z64qW9xyBP6V9/wDgE59m</latexit><latexit sha1_base64="07vfNwIzhXcJX9yzAwN2AHsXIaU=">AAACJ3icbVDLSgMxFM34rPU16tJNsAhTCmWmFhwXYtGNywodW2jLkEnTNjTzIMkIZZjPceOvuBFR0aV/YjqdhbZeCDmcc+7NzfEiRoU0zS9tZXVtfWOzsFXc3tnd29cPDu9FGHNMHByykHc8JAijAXEklYx0Ik6Q7zHS9iY3M739QLigYdCS04j0fTQK6JBiJBXl6lctwy7DS9gy6mVYgTZ2LXVht6a4XjY+4WSQJtg1FW/YlXqlVp6bzpQrdfWSWTWzgsvAykEJ5NV09dfeIMSxTwKJGRKia5mR7CeIS4oZSYu9WJAI4Qkaka6CAfKJ6CfZJik8VcwADkOuTiBhxv7uSJAvxNT3lNNHciwWtRn5n9aN5dDuJzSIYkkCPH9oGDMoQzhLDQ4oJ1iyqQIIc6p2hXiMOMJSZVtUIViLX14GTq16UTXv6qXGdZ5GARyDE2AAC5yDBrgFTeAADB7BM3gD79qT9qJ9aJ9z64qW9xyBP6V9/wDgE59m</latexit><latexit sha1_base64="07vfNwIzhXcJX9yzAwN2AHsXIaU=">AAACJ3icbVDLSgMxFM34rPU16tJNsAhTCmWmFhwXYtGNywodW2jLkEnTNjTzIMkIZZjPceOvuBFR0aV/YjqdhbZeCDmcc+7NzfEiRoU0zS9tZXVtfWOzsFXc3tnd29cPDu9FGHNMHByykHc8JAijAXEklYx0Ik6Q7zHS9iY3M739QLigYdCS04j0fTQK6JBiJBXl6lctwy7DS9gy6mVYgTZ2LXVht6a4XjY+4WSQJtg1FW/YlXqlVp6bzpQrdfWSWTWzgsvAykEJ5NV09dfeIMSxTwKJGRKia5mR7CeIS4oZSYu9WJAI4Qkaka6CAfKJ6CfZJik8VcwADkOuTiBhxv7uSJAvxNT3lNNHciwWtRn5n9aN5dDuJzSIYkkCPH9oGDMoQzhLDQ4oJ1iyqQIIc6p2hXiMOMJSZVtUIViLX14GTq16UTXv6qXGdZ5GARyDE2AAC5yDBrgFTeAADB7BM3gD79qT9qJ9aJ9z64qW9xyBP6V9/wDgE59m</latexit>

T (1) = c0<latexit sha1_base64="hoVt7s68ilDL6qJiQTsWe7AThqg=">AAAB/3icbVDLSsNAFL3xWesr6sKFm8Ei1E1JRFAXQtGNywqNLbQhTCbTdujkwcxEKCEbf8WNCxW3/oY7/8ZpmoW2HrhwOOfeuXOPn3AmlWV9G0vLK6tr65WN6ubW9s6uubf/IONUEOqQmMei62NJOYuoo5jitJsIikOf044/vp36nUcqJIujtpok1A3xMGIDRrDSkmcetuv2KbpG/eKpTNAgz4hn5Z5ZsxpWAbRI7JLUoETLM7/6QUzSkEaKcCxlz7YS5WZYKEY4zav9VNIEkzEe0p6mEQ6pdLNia45OtBKgQSx0RQoV6u+JDIdSTkJfd4ZYjeS8NxX/83qpGly6GYuSVNGIzBYNUo5UjKZpoIAJShSfaIKJYPqviIywwETpzKo6BHv+5EXinDWuGtb9ea15U6ZRgSM4hjrYcAFNuIMWOEAgh2d4hTfjyXgx3o2PWeuSUc4cwB8Ynz+JvZVP</latexit><latexit sha1_base64="hoVt7s68ilDL6qJiQTsWe7AThqg=">AAAB/3icbVDLSsNAFL3xWesr6sKFm8Ei1E1JRFAXQtGNywqNLbQhTCbTdujkwcxEKCEbf8WNCxW3/oY7/8ZpmoW2HrhwOOfeuXOPn3AmlWV9G0vLK6tr65WN6ubW9s6uubf/IONUEOqQmMei62NJOYuoo5jitJsIikOf044/vp36nUcqJIujtpok1A3xMGIDRrDSkmcetuv2KbpG/eKpTNAgz4hn5Z5ZsxpWAbRI7JLUoETLM7/6QUzSkEaKcCxlz7YS5WZYKEY4zav9VNIEkzEe0p6mEQ6pdLNia45OtBKgQSx0RQoV6u+JDIdSTkJfd4ZYjeS8NxX/83qpGly6GYuSVNGIzBYNUo5UjKZpoIAJShSfaIKJYPqviIywwETpzKo6BHv+5EXinDWuGtb9ea15U6ZRgSM4hjrYcAFNuIMWOEAgh2d4hTfjyXgx3o2PWeuSUc4cwB8Ynz+JvZVP</latexit><latexit sha1_base64="hoVt7s68ilDL6qJiQTsWe7AThqg=">AAAB/3icbVDLSsNAFL3xWesr6sKFm8Ei1E1JRFAXQtGNywqNLbQhTCbTdujkwcxEKCEbf8WNCxW3/oY7/8ZpmoW2HrhwOOfeuXOPn3AmlWV9G0vLK6tr65WN6ubW9s6uubf/IONUEOqQmMei62NJOYuoo5jitJsIikOf044/vp36nUcqJIujtpok1A3xMGIDRrDSkmcetuv2KbpG/eKpTNAgz4hn5Z5ZsxpWAbRI7JLUoETLM7/6QUzSkEaKcCxlz7YS5WZYKEY4zav9VNIEkzEe0p6mEQ6pdLNia45OtBKgQSx0RQoV6u+JDIdSTkJfd4ZYjeS8NxX/83qpGly6GYuSVNGIzBYNUo5UjKZpoIAJShSfaIKJYPqviIywwETpzKo6BHv+5EXinDWuGtb9ea15U6ZRgSM4hjrYcAFNuIMWOEAgh2d4hTfjyXgx3o2PWeuSUc4cwB8Ynz+JvZVP</latexit>

T (n) = T (n/2) + c1n+ c2, T (1) = c0<latexit sha1_base64="Pe4nMoFUYyteTz1FC1YLcQKDyJk=">AAACE3icbVDLSsNAFJ3UV62vqEs3g0VoqdSkCOpCKLpxWaG1hTaEyWTSDp1M4sxEKKUf4cZfceNCxa0bd/6N0zQLbb0w3MM553LnHi9mVCrL+jZyS8srq2v59cLG5tb2jrm7dyejRGDSwhGLRMdDkjDKSUtRxUgnFgSFHiNtb3g91dsPREga8aYaxcQJUZ/TgGKkNOWalWaJl+El1O2kVoYViF2bp6123LtPkK8Ve2rAruWaRatqpQUXgZ2BIsiq4ZpfPT/CSUi4wgxJ2bWtWDljJBTFjEwKvUSSGOEh6pOuhhyFRDrj9KgJPNKMD4NI6McVTNnfE2MUSjkKPe0MkRrIeW1K/qd1ExWcO2PK40QRjmeLgoRBFcFpQtCngmDFRhogLKj+K8QDJBBWOseCDsGeP3kRtGrVi6p1e1qsX2Vp5MEBOAQlYIMzUAc3oAFaAINH8AxewZvxZLwY78bHzJozspl98KeMzx9XA5jz</latexit><latexit sha1_base64="Pe4nMoFUYyteTz1FC1YLcQKDyJk=">AAACE3icbVDLSsNAFJ3UV62vqEs3g0VoqdSkCOpCKLpxWaG1hTaEyWTSDp1M4sxEKKUf4cZfceNCxa0bd/6N0zQLbb0w3MM553LnHi9mVCrL+jZyS8srq2v59cLG5tb2jrm7dyejRGDSwhGLRMdDkjDKSUtRxUgnFgSFHiNtb3g91dsPREga8aYaxcQJUZ/TgGKkNOWalWaJl+El1O2kVoYViF2bp6123LtPkK8Ve2rAruWaRatqpQUXgZ2BIsiq4ZpfPT/CSUi4wgxJ2bWtWDljJBTFjEwKvUSSGOEh6pOuhhyFRDrj9KgJPNKMD4NI6McVTNnfE2MUSjkKPe0MkRrIeW1K/qd1ExWcO2PK40QRjmeLgoRBFcFpQtCngmDFRhogLKj+K8QDJBBWOseCDsGeP3kRtGrVi6p1e1qsX2Vp5MEBOAQlYIMzUAc3oAFaAINH8AxewZvxZLwY78bHzJozspl98KeMzx9XA5jz</latexit><latexit sha1_base64="Pe4nMoFUYyteTz1FC1YLcQKDyJk=">AAACE3icbVDLSsNAFJ3UV62vqEs3g0VoqdSkCOpCKLpxWaG1hTaEyWTSDp1M4sxEKKUf4cZfceNCxa0bd/6N0zQLbb0w3MM553LnHi9mVCrL+jZyS8srq2v59cLG5tb2jrm7dyejRGDSwhGLRMdDkjDKSUtRxUgnFgSFHiNtb3g91dsPREga8aYaxcQJUZ/TgGKkNOWalWaJl+El1O2kVoYViF2bp6123LtPkK8Ve2rAruWaRatqpQUXgZ2BIsiq4ZpfPT/CSUi4wgxJ2bWtWDljJBTFjEwKvUSSGOEh6pOuhhyFRDrj9KgJPNKMD4NI6McVTNnfE2MUSjkKPe0MkRrIeW1K/qd1ExWcO2PK40QRjmeLgoRBFcFpQtCngmDFRhogLKj+K8QDJBBWOseCDsGeP3kRtGrVi6p1e1qsX2Vp5MEBOAQlYIMzUAc3oAFaAINH8AxewZvxZLwY78bHzJozspl98KeMzx9XA5jz</latexit>

T (n) = c0 +⇣n+

n

2+

n

4+ · · ·+ 4 + 2

⌘c1 + (log n)c2

<latexit sha1_base64="CEe/nBeLK5toAb21OVASpSOlGlw=">AAACQXicbZDLSgMxFIYzXmu9VV26CRahRSgzpaAuhKIblwrWC50yZNJMG8wkQ3JGKEOfzY1P4M4HcONCxa0b03EWaj1w4Pv/k0OSP0wEN+C6T87M7Nz8wmJpqby8srq2XtnYvDQq1ZR1qBJKX4fEMMEl6wAHwa4TzUgcCnYV3p5M5ld3TBuu5AWMEtaLyUDyiFMC1goqNxc1WcdHmAYu3sO+YBHU5IQiTWgmx1lz/FO1ckX7CoyFlu2mr/lgCHUaeFbVfKEGWFrVDCpVt+HmhafBK6CKijoLKo9+X9E0ZhKoIMZ0PTeBXkY0cCrYuOynhiWE3pIB61qUJGaml+URjPGudfo4Utq2BJy7PzcyEhszikN7MiYwNH9nE/O/WTeF6KCXcZmkwCT9vihKBQaFJ3niPteMghhZIFRz+1ZMh8TGBTb1sg3B+/vlaeg0G4cN97xVbR8XaZTQNtpBNeShfdRGp+gMdRBF9+gZvaI358F5cd6dj++jM06xs4V+lfP5BWedqvw=</latexit><latexit sha1_base64="CEe/nBeLK5toAb21OVASpSOlGlw=">AAACQXicbZDLSgMxFIYzXmu9VV26CRahRSgzpaAuhKIblwrWC50yZNJMG8wkQ3JGKEOfzY1P4M4HcONCxa0b03EWaj1w4Pv/k0OSP0wEN+C6T87M7Nz8wmJpqby8srq2XtnYvDQq1ZR1qBJKX4fEMMEl6wAHwa4TzUgcCnYV3p5M5ld3TBuu5AWMEtaLyUDyiFMC1goqNxc1WcdHmAYu3sO+YBHU5IQiTWgmx1lz/FO1ckX7CoyFlu2mr/lgCHUaeFbVfKEGWFrVDCpVt+HmhafBK6CKijoLKo9+X9E0ZhKoIMZ0PTeBXkY0cCrYuOynhiWE3pIB61qUJGaml+URjPGudfo4Utq2BJy7PzcyEhszikN7MiYwNH9nE/O/WTeF6KCXcZmkwCT9vihKBQaFJ3niPteMghhZIFRz+1ZMh8TGBTb1sg3B+/vlaeg0G4cN97xVbR8XaZTQNtpBNeShfdRGp+gMdRBF9+gZvaI358F5cd6dj++jM06xs4V+lfP5BWedqvw=</latexit><latexit sha1_base64="CEe/nBeLK5toAb21OVASpSOlGlw=">AAACQXicbZDLSgMxFIYzXmu9VV26CRahRSgzpaAuhKIblwrWC50yZNJMG8wkQ3JGKEOfzY1P4M4HcONCxa0b03EWaj1w4Pv/k0OSP0wEN+C6T87M7Nz8wmJpqby8srq2XtnYvDQq1ZR1qBJKX4fEMMEl6wAHwa4TzUgcCnYV3p5M5ld3TBuu5AWMEtaLyUDyiFMC1goqNxc1WcdHmAYu3sO+YBHU5IQiTWgmx1lz/FO1ckX7CoyFlu2mr/lgCHUaeFbVfKEGWFrVDCpVt+HmhafBK6CKijoLKo9+X9E0ZhKoIMZ0PTeBXkY0cCrYuOynhiWE3pIB61qUJGaml+URjPGudfo4Utq2BJy7PzcyEhszikN7MiYwNH9nE/O/WTeF6KCXcZmkwCT9vihKBQaFJ3niPteMghhZIFRz+1ZMh8TGBTb1sg3B+/vlaeg0G4cN97xVbR8XaZTQNtpBNeShfdRGp+gMdRBF9+gZvaI358F5cd6dj++jM06xs4V+lfP5BWedqvw=</latexit>

Page 19: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Binary Search Analysis‣ T(n) is O(n)‣ is this a proof?

‣ As bad as scanning the array…

‣ But on Slide #13 we said Binary Search was O(log n)!

19

Page 20: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

What happened?

Page 21: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Subtlety in Binary Search!‣ In our implementation we copied half the array‣ at each level of recursion this cost us O(n)

‣ so runtime went back up to O(n)

21

Common pitfall when implementing efficient

algorithms

Page 22: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Q: What should we do?

Page 23: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search‣ We should keep reusing the original array‣ no copying of elements!

‣ We should implement it “in-place”

23

Page 24: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search Pseudo-Code

24

function binarysearch(A, lo, hi, x):if lo >= hi:

return A[lo] == x

mid = (lo + hi) /2

if x == A[mid]:return true

if x > A[mid]:return binarysearch(A, mid+1, hi, x)

if x < A[mid]:return binarysearch(A, lo, mid-1, x)

Page 25: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

254 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 26: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

264 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 27: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

273 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 28: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

282 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 29: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

291 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 30: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search

300 minActivity #2

A = [0, 3, 8, 10, 10, 15, 18]x = 7

Page 31: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search Pseudo-Code

31

function binarysearch(A, lo, hi, x):if lo >= hi:

return A[lo] == x

mid = (lo + hi) /2

if x == A[mid]:return true

if x > A[mid]:return binarysearch(A, mid+1, hi, x)

if x < A[mid]:return binarysearch(A, lo, mid-1, x)

O(1)O(1)

O(1)

O(1)

O(1)O(1)

O(1)

O(1)

Page 32: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search‣ Does O(1) ops at each level of recursion‣ Recurrence is now

‣ Plug & Chug:

32

T (n) = T (n/2) + c1, with T (1) = c0

T (1) = c0

T (2) = T (1) + c1 = c0 + c1

T (4) = T (2) + c1 = c0 + 2c1

T (8) = T (4) + c1 = c0 + 3c1

T (2k) = c0 + kc1T (n) = c0 + (log n) · c1

Page 33: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

In-Place Binary Search‣ So in-place binary search is ‣ O(log n) !

‣ Is this a proof?

33

Page 34: Binary Search - Brown Universitycs.brown.edu › ... › files › lectures › slides › 06_binarySearch.pdf · 2020-02-13 · Binary Search Analysis ‣ Binary search implementation

Iterative Binary Search

34

function binarysearch(A,x):lo = 0hi = A.size - 1

while lo < himid = (lo + hi) / 2if A[mid] == x:

return trueif A[mid] < x:

lo = mid + 1if A[mid] > x:

hi = mid - 1

return [lo] == x

‣ Recursive algorithms can be implemented iteratively