diff --git a/docs/chapter_divide_and_conquer/summary.md b/docs/chapter_divide_and_conquer/summary.md new file mode 100644 index 000000000..345b2ecdb --- /dev/null +++ b/docs/chapter_divide_and_conquer/summary.md @@ -0,0 +1,11 @@ +# 小结 + +- 分治算法是一种常见的算法设计策略,包括分(划分)和治(合并)两个阶段,通常基于递归实现。 +- 判断是否是分治算法问题的依据包括:问题能否被分解、子问题是否独立、子问题是否可以被合并。 +- 归并排序是分治策略的典型应用,其递归地将数组划分为等长的两个子数组,直到只剩一个元素时开始逐层合并,从而完成排序。 +- 引入分治策略往往可以带来算法效率的提升。一方面,分治策略减少了计算吧操作数量;另一方面,分治后有利于系统的并行优化。 +- 分治既可以解决许多算法问题,也广泛应用于数据结构与算法设计中,处处可见其身影。 +- 相较于暴力搜索,自适应搜索效率更高。时间复杂度为 $O(\log n)$ 的搜索算法通常都是基于分治策略实现的。 +- 二分查找也体现了分治思想,我们可以通过递归分治实现二分查找。 +- 在构建二叉树问题中,构建树(原问题)可以被划分为构建左子树和右子树(子问题),其可以通过划分前序遍历和中序遍历的索引区间来实现。 +- 在汉诺塔问题中,一个规模为 $n$ 的问题可以被划分为两个规模为 $n-1$ 的子问题和一个规模为 $1$ 的子问题。按顺序解决这三个子问题后,原问题随之得到解决。 diff --git a/docs/javascripts/katex.js b/docs/javascripts/katex.js new file mode 100644 index 000000000..0946ce0a8 --- /dev/null +++ b/docs/javascripts/katex.js @@ -0,0 +1,10 @@ +document$.subscribe(({ body }) => { + renderMathInElement(body, { + delimiters: [ + { left: "$$", right: "$$", display: true }, + { left: "$", right: "$", display: false }, + { left: "\\(", right: "\\)", display: false }, + { left: "\\[", right: "\\]", display: true }, + ], + }); +}); diff --git a/docs/javascripts/mathjax.js b/docs/javascripts/mathjax.js new file mode 100644 index 000000000..117b04607 --- /dev/null +++ b/docs/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true, + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex", + }, +}; + +document$.subscribe(() => { + MathJax.typesetPromise(); +}); diff --git a/mkdocs.yml b/mkdocs.yml index d968bfe9f..c15563035 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -28,7 +28,7 @@ theme: # - header.autohide # - navigation.expand - navigation.indexes - # - navigation.instant + - navigation.instant # - navigation.prune # - navigation.sections # - navigation.tabs @@ -121,8 +121,13 @@ extra_javascript: - javascripts/mathjax.js - https://polyfill.io/v3/polyfill.min.js?features=es6 - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js + # - javascripts/katex.js + # - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.js + # - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/contrib/auto-render.min.js + extra_css: - stylesheets/extra.css + # - https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.css # Page tree nav: @@ -220,7 +225,7 @@ nav: - 11.10.   基数排序: chapter_sorting/radix_sort.md - 11.11.   小结: chapter_sorting/summary.md - 12.   分治: - # [icon: material/file-tree-outline] + # [icon: material/file-tree-outline, status: new] - chapter_divide_and_conquer/index.md # [status: new] - 12.1.   分治算法: chapter_divide_and_conquer/divide_and_conquer.md @@ -230,6 +235,8 @@ nav: - 12.3.   构建树问题: chapter_divide_and_conquer/build_binary_tree_problem.md # [status: new] - 12.4.   汉诺塔问题: chapter_divide_and_conquer/hanota_problem.md + # [status: new] + - 12.5.   小结: chapter_divide_and_conquer/summary.md - 13.   回溯: # [icon: material/map-marker-path] - chapter_backtracking/index.md @@ -239,7 +246,7 @@ nav: - 13.4.   N 皇后问题: chapter_backtracking/n_queens_problem.md - 13.5.   小结: chapter_backtracking/summary.md - 14.   动态规划: - # [icon: material/table-pivot] + # [icon: material/table-pivot, status: new] - chapter_dynamic_programming/index.md # [status: new] - 14.1.   初探动态规划: chapter_dynamic_programming/intro_to_dynamic_programming.md