Update README.md

This commit is contained in:
marina 2023-08-07 21:47:12 -07:00 committed by GitHub
parent e372bbe6f7
commit 855ecff683
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,19 +1,104 @@
## searching ## binary search
<br> <br>
* a binary search operates on a contiguous sequence with a specified left and right index (this is called the **search space**).
### binary search
<br>
* a binary search operates on a contiguous sequence with a specified left and right index. this is called the search space.
* binary searching is composed of 3 sections: * binary searching is composed of 3 sections:
* pre-processing: sort if collection is unsorted * **pre-processing**: sort if collection is unsorted
* binary search: using a loop or recursion to divide search sapce in half after each comparison * **binary search**: using a loop or recursion to divide search space in half after each comparison (`O(log(N)`)
* post-processing: determine viable candidates in the remaining space * **post-processing`: determine viable candidates in the remaining space
* there are 3 "templates" when writing a binary search: * there are 3 "templates" when writing a binary search:
* `while left < right`, with `left = mid + 1` and `right = mid - 1` * `while left < right`, with `left = mid + 1` and `right = mid - 1`
* `while left < right`, with `left = mid + 1` and `right = mid`, and `left` is returned * `while left < right`, with `left = mid + 1` and `right = mid`, and `left` is returned
* `while left + 1 < right`, with `left = 1` and `right = mid`, and `left` and `right` are returned * `while left + 1 < right`, with `left = mid` and `right = mid`, and `left` and `right` are returned
<br>
----
### iterative
<br>
```python
if lens(nums) == 0:
return False
lower, higher = 0, len(array)
while lower < higher:
mid = (higher + lower) // 2
if array[mid] == item:
return mid
elif array[mid] > item:
higher = mid - 1
else:
lower = mid + 1
return False
```
<br>
----
### recursive
<br>
```python
def binary_search_recursive(array, item, higher=None, lower=0):
higher = higher or len(array)
if higher < lower:
return False
mid = (higher + lower) // 2
if item == array[mid]:
return mid
elif item < array[mid]:
return binary_search_recursive(array, item, mid - 1, lower)
else:
return binary_search_recursive(array, item, higher, mid + 1)
```
<br>
---
### in a matrix
<br>
```python
def binary_search_matrix(matrix, item, lower=0, higher=None):
if not matrix:
return False
rows = len(matrix)
cols = len(matrix[0])
higher = higher or rows * cols
if higher > lower:
mid = (higher + lower) // 2
row = mid // cols
col = mid % cols
if item == matrix[row][col]:
return row, col
elif item < matrix[row][col]:
return binary_search_matrix(matrix, item, lower, mid - 1)
else:
return binary_search_matrix(matrix, item, mid + 1, higher)
return False
```