mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 22:28:40 +08:00 
			
		
		
		
	Finetune
This commit is contained in:
		@ -33,7 +33,7 @@ public class hanota {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 求解汉诺塔 */
 | 
					    /* 求解汉诺塔 */
 | 
				
			||||||
    static void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {
 | 
					    static void solveHanota(List<Integer> A, List<Integer> B, List<Integer> C) {
 | 
				
			||||||
        int n = A.size();
 | 
					        int n = A.size();
 | 
				
			||||||
        // 将 A 顶部 n 个圆盘借助 B 移到 C
 | 
					        // 将 A 顶部 n 个圆盘借助 B 移到 C
 | 
				
			||||||
        dfs(n, A, B, C);
 | 
					        dfs(n, A, B, C);
 | 
				
			||||||
@ -49,7 +49,7 @@ public class hanota {
 | 
				
			|||||||
        System.out.println("B = " + B);
 | 
					        System.out.println("B = " + B);
 | 
				
			||||||
        System.out.println("C = " + C);
 | 
					        System.out.println("C = " + C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        hanota(A, B, C);
 | 
					        solveHanota(A, B, C);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        System.out.println("圆盘移动完成后:");
 | 
					        System.out.println("圆盘移动完成后:");
 | 
				
			||||||
        System.out.println("A = " + A);
 | 
					        System.out.println("A = " + A);
 | 
				
			||||||
 | 
				
			|||||||
@ -23,9 +23,9 @@ def dfs(graph: GraphAdjList, visited: set[Vertex], res: list[Vertex], vet: Verte
 | 
				
			|||||||
        dfs(graph, visited, res, adjVet)
 | 
					        dfs(graph, visited, res, adjVet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点
 | 
					 | 
				
			||||||
def graph_dfs(graph: GraphAdjList, start_vet: Vertex) -> list[Vertex]:
 | 
					def graph_dfs(graph: GraphAdjList, start_vet: Vertex) -> list[Vertex]:
 | 
				
			||||||
    """深度优先遍历 DFS"""
 | 
					    """深度优先遍历 DFS"""
 | 
				
			||||||
 | 
					    # 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点
 | 
				
			||||||
    # 顶点遍历序列
 | 
					    # 顶点遍历序列
 | 
				
			||||||
    res = []
 | 
					    res = []
 | 
				
			||||||
    # 哈希表,用于记录已被访问过的顶点
 | 
					    # 哈希表,用于记录已被访问过的顶点
 | 
				
			||||||
 | 
				
			|||||||
@ -742,7 +742,7 @@
 | 
				
			|||||||
- 上文介绍过的剪枝是一种常用的优化方法。它可以避免搜索那些肯定不会产生有效解的路径,从而节省时间和空间。
 | 
					- 上文介绍过的剪枝是一种常用的优化方法。它可以避免搜索那些肯定不会产生有效解的路径,从而节省时间和空间。
 | 
				
			||||||
- 另一个常用的优化方法是加入「启发式搜索 Heuristic Search」策略,它在搜索过程中引入一些策略或者估计值,从而优先搜索最有可能产生有效解的路径。
 | 
					- 另一个常用的优化方法是加入「启发式搜索 Heuristic Search」策略,它在搜索过程中引入一些策略或者估计值,从而优先搜索最有可能产生有效解的路径。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 典型例题
 | 
					## 回溯典型例题
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**搜索问题**:这类问题的目标是找到满足特定条件的解决方案。
 | 
					**搜索问题**:这类问题的目标是找到满足特定条件的解决方案。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -83,7 +83,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    [class]{hanota}-[func]{dfs}
 | 
					    [class]{hanota}-[func]{dfs}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [class]{hanota}-[func]{hanota}
 | 
					    [class]{hanota}-[func]{solveHanota}
 | 
				
			||||||
    ```
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
=== "C++"
 | 
					=== "C++"
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,6 @@
 | 
				
			|||||||
- 引入分治策略往往可以带来算法效率的提升。一方面,分治策略减少了计算吧操作数量;另一方面,分治后有利于系统的并行优化。
 | 
					- 引入分治策略往往可以带来算法效率的提升。一方面,分治策略减少了计算吧操作数量;另一方面,分治后有利于系统的并行优化。
 | 
				
			||||||
- 分治既可以解决许多算法问题,也广泛应用于数据结构与算法设计中,处处可见其身影。
 | 
					- 分治既可以解决许多算法问题,也广泛应用于数据结构与算法设计中,处处可见其身影。
 | 
				
			||||||
- 相较于暴力搜索,自适应搜索效率更高。时间复杂度为 $O(\log n)$ 的搜索算法通常都是基于分治策略实现的。
 | 
					- 相较于暴力搜索,自适应搜索效率更高。时间复杂度为 $O(\log n)$ 的搜索算法通常都是基于分治策略实现的。
 | 
				
			||||||
- 二分查找也体现了分治思想,我们可以通过递归分治实现二分查找。
 | 
					- 二分查找是分治思想的另一个典型应用,它不包含将子问题的解进行合并的步骤。我们可以通过递归分治实现二分查找。
 | 
				
			||||||
- 在构建二叉树问题中,构建树(原问题)可以被划分为构建左子树和右子树(子问题),其可以通过划分前序遍历和中序遍历的索引区间来实现。
 | 
					- 在构建二叉树问题中,构建树(原问题)可以被划分为构建左子树和右子树(子问题),其可以通过划分前序遍历和中序遍历的索引区间来实现。
 | 
				
			||||||
- 在汉诺塔问题中,一个规模为 $n$ 的问题可以被划分为两个规模为 $n-1$ 的子问题和一个规模为 $1$ 的子问题。按顺序解决这三个子问题后,原问题随之得到解决。
 | 
					- 在汉诺塔问题中,一个规模为 $n$ 的问题可以被划分为两个规模为 $n-1$ 的子问题和一个规模为 $1$ 的子问题。按顺序解决这三个子问题后,原问题随之得到解决。
 | 
				
			||||||
 | 
				
			|||||||
@ -188,7 +188,7 @@ $$
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
!!! question
 | 
					!!! question
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    给定 $n$ 种硬币,第 $i$ 个硬币的面值为 $coins[i - 1]$ ,为目标金额 $amt$ ,**每种硬币可以重复选取**,问能够凑出目标金额的最少硬币个数。如果无法凑出目标金额则返回 $-1$ 。
 | 
					    给定 $n$ 种硬币,第 $i$ 个硬币的面值为 $coins[i - 1]$ ,目标金额为 $amt$ ,**每种硬币可以重复选取**,问能够凑出目标金额的最少硬币个数。如果无法凑出目标金额则返回 $-1$ 。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
如下图所示,凑出 $11$ 元最少需要 $3$ 枚硬币,方案为 $1 + 2 + 5 = 11$ 。
 | 
					如下图所示,凑出 $11$ 元最少需要 $3$ 枚硬币,方案为 $1 + 2 + 5 = 11$ 。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -117,7 +117,7 @@ $$
 | 
				
			|||||||
$$
 | 
					$$
 | 
				
			||||||
\begin{aligned}
 | 
					\begin{aligned}
 | 
				
			||||||
T(h) & = 2 \frac{1 - 2^h}{1 - 2} - h \newline
 | 
					T(h) & = 2 \frac{1 - 2^h}{1 - 2} - h \newline
 | 
				
			||||||
& = 2^{h+1} - h \newline
 | 
					& = 2^{h+1} - h - 2 \newline
 | 
				
			||||||
& = O(2^h)
 | 
					& = O(2^h)
 | 
				
			||||||
\end{aligned}
 | 
					\end{aligned}
 | 
				
			||||||
$$
 | 
					$$
 | 
				
			||||||
 | 
				
			|||||||
@ -46,13 +46,13 @@ theme:
 | 
				
			|||||||
      primary: white
 | 
					      primary: white
 | 
				
			||||||
      # accent: indigo
 | 
					      # accent: indigo
 | 
				
			||||||
      toggle:
 | 
					      toggle:
 | 
				
			||||||
        icon: material/weather-sunny
 | 
					        icon: material/theme-light-dark
 | 
				
			||||||
        name: Switch to dark mode
 | 
					        name: Switch to dark mode
 | 
				
			||||||
    - scheme: slate
 | 
					    - scheme: slate
 | 
				
			||||||
      primary: grey
 | 
					      primary: grey
 | 
				
			||||||
      # accent: indigo
 | 
					      # accent: indigo
 | 
				
			||||||
      toggle:
 | 
					      toggle:
 | 
				
			||||||
        icon: material/weather-night
 | 
					        icon: material/theme-light-dark
 | 
				
			||||||
        name: Switch to light mode
 | 
					        name: Switch to light mode
 | 
				
			||||||
  font:
 | 
					  font:
 | 
				
			||||||
    text: Noto Sans SC
 | 
					    text: Noto Sans SC
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user