Skip to content

Commit 25a54cf

Browse files
committed
optimize url in hello algo
1 parent 1b93576 commit 25a54cf

File tree

85 files changed

+506
-506
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+506
-506
lines changed

面试和算法/hello-algo/chapter_appendix/contribution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
2. 修改 Markdown 源文件内容,检查内容的正确性,并尽量保持排版格式的统一。
1919
3. 在页面底部填写修改说明,然后点击“Propose file change”按钮。页面跳转后,点击“Create pull request”按钮即可发起拉取请求。
2020

21-
![页面编辑按键](contribution.assets/edit_markdown.png)
21+
![页面编辑按键](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_appendix/contribution.assets/edit_markdown.png)
2222

2323
图片无法直接修改,需要通过新建 [Issue](https://github.com/krahets/hello-algo/issues) 或评论留言来描述问题,我们会尽快重新绘制并替换图片。
2424

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# 附录
22

3-
![附录](../assets/covers/chapter_appendix.jpg)
3+
![附录](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/assets/covers/chapter_appendix.jpg)

面试和算法/hello-algo/chapter_appendix/installation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
推荐使用开源、轻量的 VS Code 作为本地集成开发环境(IDE)。访问 [VS Code 官网](https://code.visualstudio.com/),根据操作系统选择相应版本的 VS Code 进行下载和安装。
66

7-
![从官网下载 VS Code](installation.assets/vscode_installation.png)
7+
![从官网下载 VS Code](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_appendix/installation.assets//vscode_installation.png)
88

99
VS Code 拥有强大的扩展包生态系统,支持大多数编程语言的运行和调试。以 Python 为例,安装“Python Extension Pack”扩展包之后,即可进行 Python 代码调试。安装步骤如下图所示。
1010

11-
![安装 VS Code 扩展包](installation.assets/vscode_extension_installation.png)
11+
![安装 VS Code 扩展包](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_appendix/installation.assets//vscode_extension_installation.png)
1212

1313
## 安装语言环境
1414

面试和算法/hello-algo/chapter_array_and_linkedlist/array.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<u>数组(array)</u>是一种线性数据结构,其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的<u>索引(index)</u>。下图展示了数组的主要概念和存储方式。
44

5-
![数组定义与存储方式](array.assets/array_definition.png)
5+
![数组定义与存储方式](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/array.assets/array_definition.png)
66

77
## 数组常用操作
88

@@ -142,7 +142,7 @@
142142

143143
数组元素被存储在连续的内存空间中,这意味着计算数组元素的内存地址非常容易。给定数组内存地址(首元素内存地址)和某个元素的索引,我们可以使用下图所示的公式计算得到该元素的内存地址,从而直接访问该元素。
144144

145-
![数组元素的内存地址计算](array.assets/array_memory_location_calculation.png)
145+
![数组元素的内存地址计算](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/array.assets/array_memory_location_calculation.png)
146146

147147
观察上图,我们发现数组首个元素的索引为 $0$ ,这似乎有些反直觉,因为从 $1$ 开始计数会更自然。但从地址计算公式的角度看,**索引本质上是内存地址的偏移量**。首个元素的地址偏移量是 $0$ ,因此它的索引为 $0$ 是合理的。
148148

@@ -156,7 +156,7 @@
156156

157157
数组元素在内存中是“紧挨着的”,它们之间没有空间再存放任何数据。如下图所示,如果想在数组中间插入一个元素,则需要将该元素之后的所有元素都向后移动一位,之后再把元素赋值给该索引。
158158

159-
![数组插入元素示例](array.assets/array_insert_element.png)
159+
![数组插入元素示例](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/array.assets/array_insert_element.png)
160160

161161
值得注意的是,由于数组的长度是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。我们将这个问题的解决方案留在“列表”章节中讨论。
162162

@@ -168,7 +168,7 @@
168168

169169
同理,如下图所示,若想删除索引 $i$ 处的元素,则需要把索引 $i$ 之后的元素都向前移动一位。
170170

171-
![数组删除元素示例](array.assets/array_remove_element.png)
171+
![数组删除元素示例](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/array.assets/array_remove_element.png)
172172

173173
请注意,删除元素完成后,原先末尾的元素变得“无意义”了,所以我们无须特意去修改它。
174174

面试和算法/hello-algo/chapter_array_and_linkedlist/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 数组与链表
22

3-
![数组与链表](../assets/covers/chapter_array_and_linkedlist.jpg)
3+
![数组与链表](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/assets/covers/chapter_array_and_linkedlist.jpg)
44

55
!!! abstract
66

面试和算法/hello-algo/chapter_array_and_linkedlist/linked_list.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
链表的设计使得各个节点可以分散存储在内存各处,它们的内存地址无须连续。
88

9-
![链表定义与存储方式](linked_list.assets/linkedlist_definition.png)
9+
![链表定义与存储方式](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/linked_list.assets/linkedlist_definition.png)
1010

1111
观察上图,链表的组成单位是<u>节点(node)</u>对象。每个节点都包含两项数据:节点的“值”和指向下一节点的“引用”。
1212

@@ -462,7 +462,7 @@
462462

463463
相比之下,在数组中插入元素的时间复杂度为 $O(n)$ ,在大数据量下的效率较低。
464464

465-
![链表插入节点示例](linked_list.assets/linkedlist_insert_node.png)
465+
![链表插入节点示例](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/linked_list.assets/linkedlist_insert_node.png)
466466

467467
```src
468468
[file]{linked_list}-[class]{}-[func]{insert}
@@ -474,7 +474,7 @@
474474

475475
请注意,尽管在删除操作完成后节点 `P` 仍然指向 `n1` ,但实际上遍历此链表已经无法访问到 `P` ,这意味着 `P` 已经不再属于该链表了。
476476

477-
![链表删除节点](linked_list.assets/linkedlist_remove_node.png)
477+
![链表删除节点](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/linked_list.assets/linkedlist_remove_node.png)
478478

479479
```src
480480
[file]{linked_list}-[class]{}-[func]{remove}
@@ -739,7 +739,7 @@
739739
}
740740
```
741741

742-
![常见链表种类](linked_list.assets/linkedlist_common_types.png)
742+
![常见链表种类](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/linked_list.assets/linkedlist_common_types.png)
743743

744744
## 链表典型应用
745745

面试和算法/hello-algo/chapter_array_and_linkedlist/ram_and_cache.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
- **硬盘难以被内存取代**。首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存的成本是硬盘的几十倍,这使得它难以在消费者市场普及。
2424
- **缓存的大容量和高速度难以兼得**。随着 L1、L2、L3 缓存的容量逐步增大,其物理尺寸会变大,与 CPU 核心之间的物理距离会变远,从而导致数据传输时间增加,元素访问延迟变高。在当前技术下,多层级的缓存结构是容量、速度和成本之间的最佳平衡点。
2525

26-
![计算机存储系统](ram_and_cache.assets/storage_pyramid.png)
26+
![计算机存储系统](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/ram_and_cache.assets/storage_pyramid.png)
2727

2828
!!! tip
2929

@@ -33,7 +33,7 @@
3333

3434
如下图所示,在程序运行时,数据会从硬盘中被读取到内存中,供 CPU 计算使用。缓存可以看作 CPU 的一部分,**它通过智能地从内存加载数据**,给 CPU 提供高速的数据读取,从而显著提升程序的执行效率,减少对较慢的内存的依赖。
3535

36-
![硬盘、内存和缓存之间的数据流通](ram_and_cache.assets/computer_storage_devices.png)
36+
![硬盘、内存和缓存之间的数据流通](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_array_and_linkedlist/ram_and_cache.assets/computer_storage_devices.png)
3737

3838
## 数据结构的内存效率
3939

面试和算法/hello-algo/chapter_backtracking/backtracking_algorithm.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
[file]{preorder_traversal_i_compact}-[class]{}-[func]{pre_order}
1515
```
1616

17-
![在前序遍历中搜索节点](backtracking_algorithm.assets/preorder_find_nodes.png)
17+
![在前序遍历中搜索节点](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_nodes.png)
1818

1919
## 尝试与回退
2020

@@ -39,37 +39,37 @@
3939
观察下图所示的过程,**我们可以将尝试和回退理解为“前进”与“撤销”**,两个操作互为逆向。
4040

4141
=== "<1>"
42-
![尝试与回退](backtracking_algorithm.assets/preorder_find_paths_step1.png)
42+
![尝试与回退](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step1.png)
4343

4444
=== "<2>"
45-
![preorder_find_paths_step2](backtracking_algorithm.assets/preorder_find_paths_step2.png)
45+
![preorder_find_paths_step2](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step2.png)
4646

4747
=== "<3>"
48-
![preorder_find_paths_step3](backtracking_algorithm.assets/preorder_find_paths_step3.png)
48+
![preorder_find_paths_step3](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step3.png)
4949

5050
=== "<4>"
51-
![preorder_find_paths_step4](backtracking_algorithm.assets/preorder_find_paths_step4.png)
51+
![preorder_find_paths_step4](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step4.png)
5252

5353
=== "<5>"
54-
![preorder_find_paths_step5](backtracking_algorithm.assets/preorder_find_paths_step5.png)
54+
![preorder_find_paths_step5](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step5.png)
5555

5656
=== "<6>"
57-
![preorder_find_paths_step6](backtracking_algorithm.assets/preorder_find_paths_step6.png)
57+
![preorder_find_paths_step6](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step6.png)
5858

5959
=== "<7>"
60-
![preorder_find_paths_step7](backtracking_algorithm.assets/preorder_find_paths_step7.png)
60+
![preorder_find_paths_step7](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step7.png)
6161

6262
=== "<8>"
63-
![preorder_find_paths_step8](backtracking_algorithm.assets/preorder_find_paths_step8.png)
63+
![preorder_find_paths_step8](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step8.png)
6464

6565
=== "<9>"
66-
![preorder_find_paths_step9](backtracking_algorithm.assets/preorder_find_paths_step9.png)
66+
![preorder_find_paths_step9](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step9.png)
6767

6868
=== "<10>"
69-
![preorder_find_paths_step10](backtracking_algorithm.assets/preorder_find_paths_step10.png)
69+
![preorder_find_paths_step10](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step10.png)
7070

7171
=== "<11>"
72-
![preorder_find_paths_step11](backtracking_algorithm.assets/preorder_find_paths_step11.png)
72+
![preorder_find_paths_step11](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_paths_step11.png)
7373

7474
## 剪枝
7575

@@ -87,7 +87,7 @@
8787

8888
“剪枝”是一个非常形象的名词。如下图所示,在搜索过程中,**我们“剪掉”了不满足约束条件的搜索分支**,避免许多无意义的尝试,从而提高了搜索效率。
8989

90-
![根据约束条件剪枝](backtracking_algorithm.assets/preorder_find_constrained_paths.png)
90+
![根据约束条件剪枝](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/preorder_find_constrained_paths.png)
9191

9292
## 框架代码
9393

@@ -443,7 +443,7 @@
443443

444444
根据题意,我们在找到值为 $7$ 的节点后应该继续搜索,**因此需要将记录解之后的 `return` 语句删除**。下图对比了保留或删除 `return` 语句的搜索过程。
445445

446-
![保留与删除 return 的搜索过程对比](backtracking_algorithm.assets/backtrack_remove_return_or_not.png)
446+
![保留与删除 return 的搜索过程对比](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/backtracking_algorithm.assets/backtrack_remove_return_or_not.png)
447447

448448
相比基于前序遍历的代码实现,基于回溯算法框架的代码实现虽然显得啰唆,但通用性更好。实际上,**许多回溯问题可以在该框架下解决**。我们只需根据具体问题来定义 `state``choices` ,并实现框架中的各个方法即可。
449449

面试和算法/hello-algo/chapter_backtracking/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 回溯
22

3-
![回溯](../assets/covers/chapter_backtracking.jpg)
3+
![回溯](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/assets/covers/chapter_backtracking.jpg)
44

55
!!! abstract
66

面试和算法/hello-algo/chapter_backtracking/n_queens_problem.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
如下图所示,当 $n = 4$ 时,共可以找到两个解。从回溯算法的角度看,$n \times n$ 大小的棋盘共有 $n^2$ 个格子,给出了所有的选择 `choices` 。在逐个放置皇后的过程中,棋盘状态在不断地变化,每个时刻的棋盘就是状态 `state`
88

9-
![4 皇后问题的解](n_queens_problem.assets/solution_4_queens.png)
9+
![4 皇后问题的解](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/n_queens_problem.assets/solution_4_queens.png)
1010

1111
下图展示了本题的三个约束条件:**多个皇后不能在同一行、同一列、同一条对角线上**。值得注意的是,对角线分为主对角线 `\` 和次对角线 `/` 两种。
1212

13-
![n 皇后问题的约束条件](n_queens_problem.assets/n_queens_constraints.png)
13+
![n 皇后问题的约束条件](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/n_queens_problem.assets/n_queens_constraints.png)
1414

1515
### 逐行放置策略
1616

@@ -20,7 +20,7 @@
2020

2121
下图所示为 4 皇后问题的逐行放置过程。受画幅限制,下图仅展开了第一行的其中一个搜索分支,并且将不满足列约束和对角线约束的方案都进行了剪枝。
2222

23-
![逐行放置策略](n_queens_problem.assets/n_queens_placing.png)
23+
![逐行放置策略](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/n_queens_problem.assets/n_queens_placing.png)
2424

2525
从本质上看,**逐行放置策略起到了剪枝的作用**,它避免了同一行出现多个皇后的所有搜索分支。
2626

@@ -38,7 +38,7 @@
3838

3939
同理,**次对角线上的所有格子的 $row + col$ 是恒定值**。我们同样也可以借助数组 `diags2` 来处理次对角线约束。
4040

41-
![处理列约束和对角线约束](n_queens_problem.assets/n_queens_cols_diagonals.png)
41+
![处理列约束和对角线约束](https://gitee.com/taoweitao/hello-algo/raw/dev/docs/chapter_backtracking/n_queens_problem.assets/n_queens_cols_diagonals.png)
4242

4343
### 代码实现
4444

0 commit comments

Comments
 (0)