Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Binary SearchCS16: Introduction to Data Structures & Algorithms
Spring 2020
Outline‣ Binary search
‣ Pseudo-code
‣ Analysis
‣ In-place binary search
‣ Iterative binary search
3
Phonebook Search
42 minActivity #1
Phonebook Search
52 minActivity #1
Phonebook Search
61 minActivity #1
Phonebook Search
70 minActivity #1
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…
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
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
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
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?
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
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
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
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
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)!!
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>
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
What happened?
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
Q: What should we do?
In-Place Binary Search‣ We should keep reusing the original array‣ no copying of elements!
‣ We should implement it “in-place”
23
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)
In-Place Binary Search
254 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
In-Place Binary Search
264 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
In-Place Binary Search
273 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
In-Place Binary Search
282 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
In-Place Binary Search
291 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
In-Place Binary Search
300 minActivity #2
A = [0, 3, 8, 10, 10, 15, 18]x = 7
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)
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
In-Place Binary Search‣ So in-place binary search is ‣ O(log n) !
‣ Is this a proof?
33
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