Finetune and fix

This commit is contained in:
krahets 2023-08-24 17:48:35 +08:00
parent 628a274b50
commit f524b957d4
4 changed files with 20 additions and 17 deletions

View file

@ -4,7 +4,7 @@
package chapter_searching package chapter_searching
// 二分查找最左一个 target /* 二分查找最左一个 target */
func binarySearchLeftEdge(nums []int, target int) int { func binarySearchLeftEdge(nums []int, target int) int {
// 等价于查找 target 的插入点 // 等价于查找 target 的插入点
i := binarySearchInsertion(nums, target) i := binarySearchInsertion(nums, target)
@ -16,7 +16,7 @@ func binarySearchLeftEdge(nums []int, target int) int {
return i return i
} }
// 二分查找最右一个 target /* 二分查找最右一个 target */
func binarySearchRightEdge(nums []int, target int) int { func binarySearchRightEdge(nums []int, target int) int {
// 转化为查找最左一个 target + 1 // 转化为查找最左一个 target + 1
i := binarySearchInsertion(nums, target+1) i := binarySearchInsertion(nums, target+1)

View file

@ -4,7 +4,7 @@
package chapter_searching package chapter_searching
// 二分查找插入点(无重复元素) /* 二分查找插入点(无重复元素) */
func binarySearchInsertionSimple(nums []int, target int) int { func binarySearchInsertionSimple(nums []int, target int) int {
// 初始化双闭区间 [0, n-1] // 初始化双闭区间 [0, n-1]
i, j := 0, len(nums)-1 i, j := 0, len(nums)-1
@ -26,7 +26,7 @@ func binarySearchInsertionSimple(nums []int, target int) int {
return i return i
} }
// 二分查找插入点(存在重复元素) /* 二分查找插入点(存在重复元素) */
func binarySearchInsertion(nums []int, target int) int { func binarySearchInsertion(nums []int, target int) int {
// 初始化双闭区间 [0, n-1] // 初始化双闭区间 [0, n-1]
i, j := 0, len(nums)-1 i, j := 0, len(nums)-1

View file

@ -5,14 +5,14 @@
1. **找到问题解法**:算法需要在规定的输入范围内,可靠地求得问题的正确解。 1. **找到问题解法**:算法需要在规定的输入范围内,可靠地求得问题的正确解。
2. **寻求最优解法**:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 2. **寻求最优解法**:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。
因此,在能够解决问题的前提下,算法效率已成为衡量算法优劣的主要评价指标,它包括以下两个维度。 也就是说,在能够解决问题的前提下,算法效率是衡量算法优劣的主要评价指标,它包括以下两个维度。
- **时间效率**:算法运行速度的快慢。 - **时间效率**:算法运行速度的快慢。
- **空间效率**:算法占用内存空间的大小。 - **空间效率**:算法占用内存空间的大小。
简而言之,**我们的目标是设计“既快又省”的数据结构与算法**。而有效地评估算法效率至关重要,因为只有这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。 简而言之,**我们的目标是设计“既快又省”的数据结构与算法**。而有效地评估算法效率至关重要,因为只有这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。
效率评估方法主要分为两种:实际测试理论估算。 效率评估方法主要分为两种:实际测试理论估算。
## 实际测试 ## 实际测试
@ -26,20 +26,23 @@
由于实际测试具有较大的局限性,我们可以考虑仅通过一些计算来评估算法的效率。这种估算方法被称为「渐近复杂度分析 asymptotic complexity analysis」简称「复杂度分析」。 由于实际测试具有较大的局限性,我们可以考虑仅通过一些计算来评估算法的效率。这种估算方法被称为「渐近复杂度分析 asymptotic complexity analysis」简称「复杂度分析」。
复杂度分析评估的是算法运行所需的时间和空间资源,**它描述了随着输入数据大小的增加,算法所需时间(空间)的增长趋势**。这个定义有些拗口,我们可以将其分为三个重点来理解。 复杂度分析体现算法运行所需的时间(空间)资源与输入数据大小之间的关系。**它描述了随着输入数据大小的增加,算法执行所需时间和空间的增长趋势**。这个定义有些拗口,我们可以将其分为三个重点来理解。
1. “时间和空间资源”分别对应「时间复杂度 time complexity」和「空间复杂度 space complexity」。 - “时间和空间资源”分别对应「时间复杂度 time complexity」和「空间复杂度 space complexity」。
2. “随着输入数据大小的增加”意味着复杂度反映了算法运行效率与输入数据体量之间的关系。 - “随着输入数据大小的增加”意味着复杂度反映了算法运行效率与输入数据体量之间的关系。
3. “增长趋势”表示复杂度分析关注的是算法时间与空间的增长趋势,而非具体的运行时间或占用空间 - “时间和空间的增长趋势”表示复杂度分析关注的不是运行时间或占用空间的具体值,而是时间或空间增长的“快慢”
**复杂度分析克服了实际测试方法的弊端**。首先,它独立于测试环境,分析结果适用于所有运行平台。其次,它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能 **复杂度分析克服了实际测试方法的弊端**,体现在以下两个方面
如果你对复杂度分析的概念仍感到困惑,无须担心,我们会在后续章节中详细介绍。 - 它独立于测试环境,分析结果适用于所有运行平台。
- 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。
## 复杂度的重要性 !!! tip
复杂度分析为我们提供了一把评估算法效率的“标尺”,帮助我们衡量了执行某个算法所需的时间和空间资源,并使我们能够对比不同算法之间的效率 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍
复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太适合作为第 1 章的内容 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资源,对比不同算法之间的效率
然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和空间使用情况。因此,在深入学习数据结构与算法之前,**建议你先对复杂度建立初步的了解,以便能够完成简单算法的复杂度分析**。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和空间使用情况。
综上所述,建议你在深入学习数据结构与算法之前,**先对复杂度分析建立初步的了解,以便能够完成简单算法的复杂度分析**。

View file

@ -92,7 +92,7 @@ hide:
<h3 align="left"> 作者简介 </h3> <h3 align="left"> 作者简介 </h3>
靳宇栋 ([Krahets](https://leetcode.cn/u/jyd/))大厂高级算法工程师上海交通大学硕士。力扣LeetCode全网阅读量最高博主其 LeetBook《图解算法数据结构》已被订阅 24 万本。 靳宇栋 ([Krahets](https://leetcode.cn/u/jyd/))大厂高级算法工程师上海交通大学硕士。力扣LeetCode全网阅读量最高博主其 LeetBook《图解算法数据结构》已被订阅 26 万本。
--- ---