Skip to content

Commit 3469901

Browse files
committed
Worked around cref issue after TeXLive upgrade, changed from cref to ref for now
1 parent 6e1b39c commit 3469901

File tree

10 files changed

+20
-18
lines changed

10 files changed

+20
-18
lines changed

datastruct/elementary/sequence/sequence-zh-cn.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ \section{数字表示}
325325
\section{双数组序列}
326326
\index{序列!双数组序列} \index{双数组列表!插入和添加}
327327

328-
我们把\cref{sec:paired-array-queue}中的双数组队列扩展为双数组序列。如\cref{fig:parrays},按头对头的方式连接两个数组。在列表的头部插入时,添加到$f$数组末尾;向尾部插入时,添加到$r$数组末尾。用一对数组表示列表$S = (f, r)$,令$\textproc{Front}(S) = f$$\textproc{Rear}(S) = r$。前后插入实现如下:
328+
我们把\ref{sec:paired-array-queue}中的双数组队列扩展为双数组序列。如\cref{fig:parrays},按头对头的方式连接两个数组。在列表的头部插入时,添加到$f$数组末尾;向尾部插入时,添加到$r$数组末尾。用一对数组表示列表$S = (f, r)$,令$\textproc{Front}(S) = f$$\textproc{Rear}(S) = r$。前后插入实现如下:
329329

330330
\begin{figure}[htbp]
331331
\centering
@@ -430,7 +430,7 @@ \section{双数组序列}
430430
\section{可连接列表}
431431
\index{序列!可链接列表}
432432

433-
虽然可以用$O(\lg n)$时间在二叉树随机访问森林的头部进行插入、删除、索引,但连接两个序列并不容易。我们不能简单地将所有二叉树合并到一起,而需要不断链接大小相同的树。\cref{fig:clist}给出了一种可连接列表的实现。多叉树的根存储序列表的第一个元素$x_1$, 其它元素被分成若干片段保存在更小的序列中,每个片段是一棵子树。这些子树由一个实时队列(见\cref{sec:realtime-queue})管理。我们把序列表示为$(x_1, Q_x) = [x_1, x_2, ..., x_n]$。当需要连接另一个列表$(y_1, Q_y) = [y_1, y_2, ..., y_m]$时,我们将其入队到$Q_x$的尾部。连接运算定义如下。实时队列的入队性能为常数时间,因此列表连接的性能也是常数时间的。
433+
虽然可以用$O(\lg n)$时间在二叉树随机访问森林的头部进行插入、删除、索引,但连接两个序列并不容易。我们不能简单地将所有二叉树合并到一起,而需要不断链接大小相同的树。\cref{fig:clist}给出了一种可连接列表的实现。多叉树的根存储序列表的第一个元素$x_1$, 其它元素被分成若干片段保存在更小的序列中,每个片段是一棵子树。这些子树由一个实时队列(见\ref{sec:realtime-queue})管理。我们把序列表示为$(x_1, Q_x) = [x_1, x_2, ..., x_n]$。当需要连接另一个列表$(y_1, Q_y) = [y_1, y_2, ..., y_m]$时,我们将其入队到$Q_x$的尾部。连接运算定义如下。实时队列的入队性能为常数时间,因此列表连接的性能也是常数时间的。
434434

435435
\begin{figure}[htbp]
436436
\centering

datastruct/tree/binary-search-tree/bstree-zh-cn.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ \chapter{二叉搜索树}
3232
\numberwithin{Exercise}{chapter}
3333
\fi
3434

35-
数组和链表通常被认为是最基础的数据结构,其实它们并不简单(第12章)。在某些系统中,数组是最基本的组件,甚至链表也可以由数组来实现(\cref{sec:list-index-array})。另一方面,在函数式环境中,链表被作为最基本的组件来实现数组和其它更复杂的数据结构。二叉搜索树是另一种基础数据结构。乔$\cdot$本特利在《编程珠玑》\cite{Bentley}中,讨论了如何统计一段文字中各单词的个数。下面的例子程序给出了一个解法。\index{统计单词}
35+
数组和链表通常被认为是最基础的数据结构,其实它们并不简单(第12章)。在某些系统中,数组是最基本的组件,甚至链表也可以由数组来实现(\ref{sec:list-index-array})。另一方面,在函数式环境中,链表被作为最基本的组件来实现数组和其它更复杂的数据结构。二叉搜索树是另一种基础数据结构。乔$\cdot$本特利在《编程珠玑》\cite{Bentley}中,讨论了如何统计一段文字中各单词的个数。下面的例子程序给出了一个解法。\index{统计单词}
3636

3737
\lstset{frame=single}
3838
\begin{lstlisting}[language=Bourbaki]

datastruct/tree/red-black-tree/rbtree-zh-cn.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ \chapter{红黑树}
8383
\section{平衡}
8484

8585
\index{树旋转}
86-
为避免极不平衡的情况,可将输入序列打乱(\cref{sec:bst-random-build})。但这种方法有局限性,无法处理交互输入的序列。人们找到了一些保持平衡性的方法,它们大多依赖二叉树的旋转操作,可以在改变树结构的同时保持元素有序。本章介绍红黑树,下一章介绍AVL树,它们都是自平衡树。第8章还会介绍伸展树,它能够随着操作,逐步恢复平衡。不同的二叉树可以产生相同的中序遍历结果。树旋转如\cref{fig:tree-rotation}所示,可以通过模式匹配来定义:
86+
为避免极不平衡的情况,可将输入序列打乱(\ref{sec:bst-random-build})。但这种方法有局限性,无法处理交互输入的序列。人们找到了一些保持平衡性的方法,它们大多依赖二叉树的旋转操作,可以在改变树结构的同时保持元素有序。本章介绍红黑树,下一章介绍AVL树,它们都是自平衡树。第8章还会介绍伸展树,它能够随着操作,逐步恢复平衡。不同的二叉树可以产生相同的中序遍历结果。树旋转如\cref{fig:tree-rotation}所示,可以通过模式匹配来定义:
8787

8888
\begin{figure}[htbp]
8989
\centering

datastruct/tree/trie/trie-zh-cn.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,7 @@ \subsection{词典和自动补齐}
991991
\EndFunction
992992
\end{algorithmic}
993993
994-
其中函数\textproc{Expand}($s, T, n$)从$T$中扩展出$n$个结果,并将$s$附加在每个键的前面。我们可以用广度优先搜索方法实现它(见\cref{sec:DFS-BFS}):
994+
其中函数\textproc{Expand}($s, T, n$)从$T$中扩展出$n$个结果,并将$s$附加在每个键的前面。我们可以用广度优先搜索方法实现它(见\ref{sec:DFS-BFS}):
995995
996996
\begin{algorithmic}[1]
997997
\Function{Expand}{$s, T, n$}

others/appendix/list/list-zh-cn.tex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ \subsection{末尾元素}
209209
\EndFunction
210210
\end{algorithmic}
211211

212-
\textproc{Init}通过\textproc{Cons}累积结果。这样产生的列表是逆序的,最后需要将结果再倒转过来(见\cref{subsec:reverse})。
212+
\textproc{Init}通过\textproc{Cons}累积结果。这样产生的列表是逆序的,最后需要将结果再倒转过来(见\ref{subsec:reverse})。
213213

214214
\subsection{反向索引}
215215
\index{列表!反向索引} \index{列表!rindex}
@@ -482,7 +482,7 @@ \subsubsection{插入}
482482
\EndFunction
483483
\end{algorithmic}
484484

485-
在循环中的任何时刻,结果列表都是已序的。和递归实现相比,它们有一个本质不同:前者从右向左处理列表,而后者从左向右处理。我们稍后将在“尾递归”(\cref{sec:tail-call})中讲述如何消除这一差异。第3章详细介绍插入排序,包括性能分析和优化。
485+
在循环中的任何时刻,结果列表都是已序的。和递归实现相比,它们有一个本质不同:前者从右向左处理列表,而后者从左向右处理。我们稍后将在“尾递归”(\ref{sec:tail-call})中讲述如何消除这一差异。第3章详细介绍插入排序,包括性能分析和优化。
486486

487487
\begin{Exercise}[label={ex:list-insert}]
488488
\Question{当插入位置越界时,将其按照添加来处理。}
@@ -650,7 +650,7 @@ \subsubsection{连接}
650650

651651
\subsection{和与积}
652652
\index{列表!和} \index{列表!积}
653-
我们常常需要计算列表的和与积。它们有着共同的计算结构。我们在\cref{sec:fold}中对它们进行抽象。定义空列表的和为0、积为1。
653+
我们常常需要计算列表的和与积。它们有着共同的计算结构。我们在\ref{sec:fold}中对它们进行抽象。定义空列表的和为0、积为1。
654654

655655
\be
656656
\begin{array}{cc}
@@ -767,7 +767,7 @@ \subsection{和与积}
767767
\end{array}
768768
\ee
769769

770-
这一方法的复杂度为$O(\lg n)$。将$n$表示成二进制数$n = (a_ma_{m-1}...a_1a_0)_2$,如果$a_i = 1$,我们清楚地知道,需要计算$b^{2^i}$。这和二项式堆的情况很类似(\cref{sec:binomial-heap})。将所有二进制位为1的幂计算出,再累乘到一起就得到最后的结果。例如,当计算$b^{11}$时,11写成二进制为$11 = (1011)_2 = 2^3 + 2 +1$,因此$b^{11} = b^{2^3} \times b^2 \times b$。我们可以通过以下的步骤进行计算:
770+
这一方法的复杂度为$O(\lg n)$。将$n$表示成二进制数$n = (a_ma_{m-1}...a_1a_0)_2$,如果$a_i = 1$,我们清楚地知道,需要计算$b^{2^i}$。这和二项式堆的情况很类似(\ref{sec:binomial-heap})。将所有二进制位为1的幂计算出,再累乘到一起就得到最后的结果。例如,当计算$b^{11}$时,11写成二进制为$11 = (1011)_2 = 2^3 + 2 +1$,因此$b^{11} = b^{2^3} \times b^2 \times b$。我们可以通过以下的步骤进行计算:
771771

772772
\begin{enumerate}
773773
\item 计算$b^1$,得$b$
@@ -1165,7 +1165,9 @@ \subsection{逐一映射}
11651165
映射是一个抽象概念,它不仅局限于列表,也可以扩展到许多复杂的代数结构。下一章我们会介绍如何对树结构进行映射。只要我们能够遍历一个结构,并且有空结构的定义,就可以使用映射的概念。
11661166

11671167
\subsection{反转}
1168-
{\label[subsection]{subsec:reverse}} \index{列表!反转}
1168+
\label{subsec:reverse}
1169+
1170+
\index{列表!反转}
11691171

11701172
如何用最小的空间反转一个单向链表是一道经典题目,需要仔细操作节点的引用。有一个简单的策略:(1)先写出一个纯递归解;(2)转换为尾递归;(3)将尾递归转换为命令式操作。纯递归解很直观:
11711173

others/preface/preface-en.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ \subsection*{Improvement}
9696

9797
\be
9898
\textit{minfree}(x_1, x_2, \dotsc, x_n) \leq n
99-
\label{eq:min-free}
99+
{\label[equation]{eq:min-free}}
100100
\ee
101101

102102
Use an array $F$ of $n + 1$ flags to mark whether a number is free in $[0, n]$.

others/preface/preface-zh-cn.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ \subsection*{改进}
9292

9393
\be
9494
\textit{minfree}(x_1, x_2, \dotsc, x_n) \leq n
95-
\label{eq:min-free}
95+
{\label[equation]{eq:min-free}}
9696
\ee
9797

9898
我们用一个长度为$n + 1$的数组$F$,来标记区间$[0, n]$内的某个整数是否可用。

prelude.sty

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@
5757
\usepackage{textcomp}
5858
\usepackage{mdframed}
5959
\usepackage{sourcecodepro}
60-
\usepackage{cleveref}
6160
\usepackage{etoolbox}
6261
\usepackage{csquotes}
62+
\usepackage{cleveref}
6363

6464
\titleformat{\paragraph}
6565
{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}

search/search-zh-cn.tex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ \section{二维查找}
435435
\begin{Answer}[ref = {ex:binary-search}]
436436
\Question{证明$k$选择的平均复杂度为$O(n)$
437437

438-
参考快速排序的复杂度分析\cref{sec:quick-sort-big-o}。}
438+
参考快速排序的复杂度分析\ref{sec:quick-sort-big-o}。}
439439

440440
\Question{为了查找$A$中的前$k$小元素,我们可以获取$x = \max\ (take\ k\ A), y = \min\ (drop\ k\ A)$。如果$x < y$,则$A$的前$k$个元素就是答案;否则我们用$x$划分前$k$个元素,用$y$划分剩余元素,然后在子序列$[a \gets A, x < a < y]$中递归查找前$k'$个元素,其中$k' = k - |[a \gets A, a \leq x]|$。请实现这一算法,并分析复杂度。
441441

@@ -908,7 +908,7 @@ \section{最大子序列和}
908908
s' = max m' s in (m', s')
909909
\end{Haskell}
910910

911-
其中\texttt{tails}的定义见\cref{ex:list-tails},\texttt{zipWith}的定义见\cref{sec:list-zipwith},\texttt{concatMap}的定义见\cref{sec:list-concatmap}。$scanl$$foldl$类似,但它每次把结果都保存到一个列表中。$scanl1$$scanl$的一个特殊情况,初始值是列表的第一个元素。
911+
其中\texttt{tails}的定义见\cref{ex:list-tails},\texttt{zipWith}的定义见\ref{sec:list-zipwith},\texttt{concatMap}的定义见\ref{sec:list-concatmap}。$scanl$$foldl$类似,但它每次把结果都保存到一个列表中。$scanl1$$scanl$的一个特殊情况,初始值是列表的第一个元素。
912912

913913
\[
914914
\begin{array}{rcl}
@@ -2408,7 +2408,7 @@ \subsection{华容道}
24082408
\begin{Answer}[ref = {ex:conway-slide-puzzle}]
24092409
\Question{按层遍历一棵二叉树。
24102410
2411-
按广度优先顺序访问各个节点,使用\cref{sec:finger-tree}中的序列作为队列:
2411+
按广度优先顺序访问各个节点,使用\ref{sec:finger-tree}中的序列作为队列:
24122412
\begin{Haskell}
24132413
data Tr a = E | Br (Tr a) a (Tr a)
24142414

sorting/dc-sort/dcsort-zh-cn.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,15 @@ \section{快速排序}
8585
\end{array}
8686
\ee
8787

88-
我们使用了ZF表达式(见\cref{sec:zf-expr}、\cref{sec:list-filter})划分列表,如下面的例子代码:
88+
我们使用了ZF表达式(见\ref{sec:zf-expr}、\ref{sec:list-filter})划分列表,如下面的例子代码:
8989

9090
\lstset{frame = single}
9191
\begin{Haskell}
9292
sort [] = []
9393
sort (x:xs) = sort [y | y<-xs, y <= x] ++ [x] ++ sort [y | y<-xs, x < y]
9494
\end{Haskell}
9595

96-
我们假设按递增顺序排序。可以把比较条件($\leq$)抽象出来,对数字、字符串等进行各种排序。我们并不要求一定是全序,但是至少要满足\textbf{严格弱序}\cite{wiki-total-order}、\cite{wiki-sweak-order}(见\cref{sec:strict-weak-order})。
96+
我们假设按递增顺序排序。可以把比较条件($\leq$)抽象出来,对数字、字符串等进行各种排序。我们并不要求一定是全序,但是至少要满足\textbf{严格弱序}\cite{wiki-total-order}、\cite{wiki-sweak-order}(见\ref{sec:strict-weak-order})。
9797

9898
\subsection{划分}
9999
\index{快速排序!划分(partition)}

0 commit comments

Comments
 (0)