Refactor the articles related to searching algorithm. Add the chapter of binary search. Add the section of searching algorithm revisited. (#464)
@ -0,0 +1 @@
|
|||||||
|
add_executable(linear_search linear_search.c)
|
@ -1,4 +1,3 @@
|
|||||||
add_executable(time_complexity time_complexity.c)
|
add_executable(time_complexity time_complexity.c)
|
||||||
add_executable(worst_best_time_complexity worst_best_time_complexity.c)
|
add_executable(worst_best_time_complexity worst_best_time_complexity.c)
|
||||||
add_executable(leetcode_two_sum leetcode_two_sum.c)
|
|
||||||
add_executable(space_complexity space_complexity.c)
|
add_executable(space_complexity space_complexity.c)
|
@ -1,3 +1,2 @@
|
|||||||
add_executable(binary_search binary_search.c)
|
add_executable(binary_search binary_search.c)
|
||||||
add_executable(linear_search linear_search.c)
|
add_executable(leetcode_two_sum leetcode_two_sum.c)
|
||||||
add_executable(hashing_search hashing_search.c)
|
|
@ -0,0 +1 @@
|
|||||||
|
add_executable(binary_search binary_search.cpp)
|
@ -1,4 +1,3 @@
|
|||||||
add_executable(leetcode_two_sum leetcode_two_sum.cpp)
|
|
||||||
add_executable(space_complexity space_complexity.cpp)
|
add_executable(space_complexity space_complexity.cpp)
|
||||||
add_executable(time_complexity time_complexity.cpp)
|
add_executable(time_complexity time_complexity.cpp)
|
||||||
add_executable(worst_best_time_complexity worst_best_time_complexity.cpp)
|
add_executable(worst_best_time_complexity worst_best_time_complexity.cpp)
|
@ -1,3 +1,3 @@
|
|||||||
add_executable(binary_search binary_search.cpp)
|
|
||||||
add_executable(hashing_search hashing_search.cpp)
|
add_executable(hashing_search hashing_search.cpp)
|
||||||
|
add_executable(leetcode_two_sum leetcode_two_sum.cpp)
|
||||||
add_executable(linear_search linear_search.cpp)
|
add_executable(linear_search linear_search.cpp)
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 102 KiB |
@ -1,16 +1,8 @@
|
|||||||
# 小结
|
# 小结
|
||||||
|
|
||||||
- 线性查找通过遍历数据结构并进行条件判断来完成查找任务。
|
|
||||||
- 二分查找依赖于数据的有序性,通过循环逐步缩减一半搜索区间来实现查找。它要求输入数据有序,且仅适用于数组或基于数组实现的数据结构。
|
- 二分查找依赖于数据的有序性,通过循环逐步缩减一半搜索区间来实现查找。它要求输入数据有序,且仅适用于数组或基于数组实现的数据结构。
|
||||||
- 哈希查找利用哈希表实现常数阶时间复杂度的查找操作,体现了空间换时间的算法思维。
|
- 暴力搜索通过遍历数据结构来定位数据。线性搜索适用于数组和链表,广度优先搜索和深度优先搜索适用于图和树。此类算法通用性好,无需对数据预处理,但时间复杂度 $O(n)$ 较高。
|
||||||
- 下表概括并对比了三种查找算法的特性和时间复杂度。
|
- 哈希查找、树查找和二分查找属于高效搜索方法,可在特定数据结构中快速定位目标元素。此类算法效率高,时间复杂度可达 $O(\log n)$ 甚至 $O(1)$ ,但通常需要借助额外数据结构。
|
||||||
|
- 实际中,我们需要对数据体量、搜索性能要求、数据查询和更新频率等因素进行具体分析,从而选择合适的搜索方法。
|
||||||
<div class="center-table" markdown>
|
- 线性搜索适用于小型或频繁更新的数据;二分查找适用于大型、排序的数据;哈希查找适合对查询效率要求较高且无需范围查询的数据;树查找适用于需要维护顺序和支持范围查询的大型动态数据。
|
||||||
|
- 用哈希查找替换线性查找是一种常用的优化运行时间的策略,可将时间复杂度从 $O(n)$ 降低至 $O(1)$ 。
|
||||||
| | 线性查找 | 二分查找 | 哈希查找 |
|
|
||||||
| ------------------------------------- | ------------------------ | ----------------------------- | ------------------------ |
|
|
||||||
| 适用数据结构 | 数组、链表 | 有序数组 | 数组、链表 |
|
|
||||||
| 时间复杂度</br>(查找,插入,删除) | $O(n)$ , $O(1)$ , $O(n)$ | $O(\log n)$ , $O(n)$ , $O(n)$ | $O(1)$ , $O(1)$ , $O(1)$ |
|
|
||||||
| 空间复杂度 | $O(1)$ | $O(1)$ | $O(n)$ |
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|