在周志华的《机器学习》一书中经常有伪代码
于是今天研究了一下怎么使用Latex写出伪代码
这是《机器学习》第74页的伪代码的Latex代码
\documentclass[11pt,UTF8]{ctexart}
\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\usepackage{amsmath}
\usepackage{amssymb}%空集符号
\floatname{algorithm}{机器学习算法}
\renewcommand{\algorithmicrequire}{\textbf{输入:}}
\renewcommand{\algorithmicensure}{\textbf{输出:}}
\begin{document}
\begin{algorithm}
\caption{决策树学习基本算法}
\begin{algorithmic}[1] %显示行号,1是每行都显示
\Require 训练集$D=\left\{(\mathbf{x}_1,y_1),(\mathbf{x}_1,y_1),\dots,(\mathbf{x}_m,y_m)\right\};$
属性集$A=\left\{(a_1,a_2,\dots,a_d)\right\}$
\Ensure 以$node$为根节点的一棵决策树
\Function {$TreeGenerate$}{$D, A$}
\State 生成节点$node$
\If {$D$中的样本全属于同一类别$C$}
\State将$node$标记为$C$类叶节点;\Return
\EndIf
\If {$A=\varnothing$ $\textbf{OR}$ $D$中样本再$A$上取值相同}
\State将$node$标记为叶节点,其类别标记为$D$中样本类最多的类;\Return
\EndIf
\State 从$A$中选择最优划分属性$a_*$
\For {$a_*$的每一个值$a_*^v$}
\State 为$node$生成一个分支;令$D_v$表示$D$中在$a_*$上取值为$a_*^v$的样本子集;
\If{$D_v$为空}
将分支节点标记为叶节点,其类别标记为$D$中样本最多的类;\Return
\Else{ 以\Call{$TreeGenerate$}{$D_v, A\backslash\{a_*\}$}为分支节点}
\EndIf
\EndFor
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
输出结果: