自用速查表,AI 生成。
🏗️ 基础结构
\usepackage{algorithm}
\usepackage{algorithmic}
\begin{algorithm}[htbp]
\caption{算法标题}
\label{alg:label}
\begin{algorithmic}[1]
\end{algorithmic}
\end{algorithm}
Code language: TeX (tex)
📌 环境参数
| 参数 | 说明 | 示例 |
|---|
[h] | 此处(here) | \begin{algorithm}[h] |
[t] | 顶部(top) | \begin{algorithm}[t] |
[b] | 底部(bottom) | \begin{algorithm}[b] |
[p] | 独立页(page) | \begin{algorithm}[p] |
[H] | 强制此处(需 float 宏包) | \begin{algorithm}[H] |
[1] | 每行显示行号 | \begin{algorithmic}[1] |
[2] | 每2行显示行号 | \begin{algorithmic}[2] |
[] | 不显示行号 | \begin{algorithmic} |
🔑 核心命令分类
1️⃣ 输入输出声明
| 命令 | 效果 | 说明 |
|---|
\REQUIRE{} | Input: 内容 | 前置条件/输入 |
\ENSURE{} | Output: 内容 | 后置条件/输出 |
\REQUIRE{数组 $A[1..n]$,目标值 $target$}
\ENSURE{目标值索引或 -1}Code language: TeX (tex)
2️⃣ 语句命令
| 命令 | 效果 | 说明 |
|---|
\STATE{} | 语句内容 | 普通语句(带行号) |
\STATEx{} | 语句内容 | 普通语句(不带行号) |
\STATE{$left \gets 1$}
\STATEX{\COMMENT{初始化}}Code language: TeX (tex)
3️⃣ 条件判断
| 命令 | 效果 | 说明 |
|---|
\IF{} … \ENDIF | if 条件 then … end if | 单分支 |
\IF{} … \ELSE … \ENDIF | if … else … end if | 双分支 |
\IF{} … \ELSIF{} … \ELSE … \ENDIF | if … elsif … else … end if | 多分支 |
\IF{$A[mid] = target$}
\RETURN{$mid$}
\ELSIF{$A[mid] < target$}
\STATE{$left \gets mid + 1$}
\ELSE
\STATE{$right \gets mid - 1$}
\ENDIF
Code language: TeX (tex)
4️⃣ 循环结构
| 命令 | 效果 | 说明 |
|---|
\FOR{} … \ENDFOR | for … do … end for | for 循环 |
\WHILE{} … \ENDWHILE | while … do … end while | while 循环 |
\REPEAT … \UNTIL{} | repeat … until 条件 | repeat-until 循环 |
\LOOP … \ENDLOOP | loop … end loop | 无限循环 |
\FOR{$i \gets 1$ \TO $n$}
\STATE{处理 $A[i]$}
\ENDFOR
\WHILE{$left \leq right$}
\STATE{继续搜索}
\ENDWHILE
\REPEAT
\STATE{执行操作}
\UNTIL{$condition = true$}
Code language: TeX (tex)
5️⃣ 函数/过程
| 命令 | 效果 | 说明 |
|---|
\FUNCTION{名称}{参数} … \ENDFUNCTION | function 名称(参数) … end function | 函数定义 |
\PROCEDURE{名称}{参数} … \ENDPROCEDURE | procedure 名称(参数) … end procedure | 过程定义 |
\RETURN{} | return 内容 | 返回值 |
\CALL{名称}{参数} | call 名称(参数) | 调用函数 |
\FUNCTION{GCD}{$a, b$}
\IF{$b = 0$}
\RETURN{$a$}
\ELSE
\RETURN{\CALL{GCD}{$b, a \mod b$}}
\ENDIF
\ENDFUNCTION
Code language: TeX (tex)
6️⃣ 注释与逻辑
| 命令 | 效果 | 说明 |
|---|
\COMMENT{} | $\triangleright$ 注释内容 | 行内注释 |
\AND | and | 逻辑与 |
\OR | or | 逻辑或 |
\NOT | not | 逻辑非 |
\TRUE | true | 真值 |
\FALSE | false | 假值 |
\IF{$x > 0$ \AND $x < 10$}
\STATE{有效范围} \COMMENT{检查边界}
\ENDIF
\STATE{$flag \gets \TRUE$}
Code language: TeX (tex)
🎨 完整示例模板
二分查找
\begin{algorithm}[htbp]
\caption{二分查找算法}
\label{alg:binarysearch}
\begin{algorithmic}[1]
\REQUIRE{有序数组 $A[1..n]$,目标值 $target$}
\ENSURE{目标值索引或 -1}
\STATE{$left \gets 1$, $right \gets n$}
\WHILE{$left \leq right$}
\STATE{$mid \gets \lfloor (left + right) / 2 \rfloor$}
\IF{$A[mid] = target$}
\RETURN{$mid$}
\ELSIF{$A[mid] < target$}
\STATE{$left \gets mid + 1$}
\ELSE
\STATE{$right \gets mid - 1$}
\ENDIF
\ENDWHILE
\RETURN{$-1$}
\end{algorithmic}
\end{algorithm}
Code language: TeX (tex)
快速排序
\begin{algorithm}[htbp]
\caption{快速排序算法}
\label{alg:quicksort}
\begin{algorithmic}[1]
\REQUIRE{数组 $A[1..n]$}
\ENSURE{排序后的数组}
\IF{$n \leq 1$}
\RETURN{$A$}
\ENDIF
\STATE{选择 pivot $p \gets A[n/2]$}
\STATE{初始化 $left \gets [], right \gets []$}
\FOR{$i \gets 1$ \TO $n$}
\IF{$A[i] < p$}
\STATE{$left$.append($A[i]$)}
\ELSE
\STATE{$right$.append($A[i]$)}
\ENDIF
\ENDFOR
\RETURN{QuickSort($left$) + $p$ + QuickSort($right$)}
\end{algorithmic}
\end{algorithm}
Code language: TeX (tex)
带注释的算法
\begin{algorithm}[htbp]
\caption{计算阶乘}
\label{alg:factorial}
\begin{algorithmic}[1]
\REQUIRE{非负整数 $n$}
\ENSURE{$n!$ 的值}
\STATE{$result \gets 1$} \COMMENT{初始化结果}
\FOR{$i \gets 1$ \TO $n$}
\STATE{$result \gets result \times i$} \COMMENT{累乘}
\ENDFOR
\RETURN{$result$}
\end{algorithmic}
\end{algorithm}
Code language: TeX (tex)
🎯 常用数学符号
| 符号 | LaTeX 代码 | 用途 |
|---|
| \gets | 赋值 |
| \leq | 小于等于 |
| \geq | 大于等于 |
| \neq | 不等于 |
| \lfloor \rfloor | 向下取整 |
| \lceil \rceil | 向上取整 |
| \times | 乘法 |
| \div | 除法 |
| \mod \bmod \pmod | 取模 |
| \emptyset | 空集 |
| \in | 属于 |
| \cup | 并集 |
| \cap | 交集 |
🎨 自定义样式
修改关键字
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\renewcommand{\algorithmicif}{\textbf{if}}
\renewcommand{\algorithmicthen}{\textbf{then}}
\renewcommand{\algorithmicelse}{\textbf{else}}
\renewcommand{\algorithmicendif}{\textbf{end if}}
\renewcommand{\algorithmicfor}{\textbf{for}}
\renewcommand{\algorithmicendfor}{\textbf{end for}}
\renewcommand{\algorithmicwhile}{\textbf{while}}
\renewcommand{\algorithmicendwhile}{\textbf{end while}}
\renewcommand{\algorithmicreturn}{\textbf{return}}
Code language: TeX (tex)
添加颜色
\usepackage{xcolor}
\renewcommand{\algorithmicrequire}{\textcolor{blue}{\textbf{Input:}}}
\renewcommand{\algorithmicensure}{\textcolor{blue}{\textbf{Output:}}}
Code language: TeX (tex)
修改行号样式
\algrenewcommand{\algorithmiclineno}[1]{\textcolor{gray}{#1:}}Code language: TeX (tex)
⚠️ 注意事项
| 问题 | 解决 |
|---|
| 关键字必须全大写 | \IF\FOR\WHILE |
| 需要编译两次 | 引用才能正确显示 |
| 中文需要额外宏包 | \usepackage{ctex} |
| 标签放在 caption 后 | \caption{} 后加 \label{} |
| 避免与 algorithm2e 混用 | 会产生命令冲突 |
| 浮动位置不对 | 用 [htbp] 或 [H] |
📊 一页速查
algorithm + algorithmic 速查表
环境:\begin{algorithm}[htbp] … \end{algorithm}
代码:\begin{algorithmic}[1] … \end{algorithmic}
输入输出:\REQUIRE{} \ENSURE{}
语句:\STATE{} \STATEx{}
条件:\IF{} … \ELSIF{} … \ELSE{} … \ENDIF
循环:\FOR{}…\ENDFOR \WHILE{}…\ENDWHILE
函数:\FUNCTION{}{} … \ENDFUNCTION
返回:\RETURN{} \CALL{}{}
注释:\COMMENT{}
逻辑:\AND \OR \NOT \TRUE \FALSE
引用:\ref{alg:label} \pageref{alg:label}
赋值:$\gets$
比较:$\leq$ $\geq$ $\neq$
✅ 最小可用模板
\documentclass{article}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{ctex}
\begin{document}
\begin{algorithm}[htbp]
\caption{算法名称}
\label{alg:example}
\begin{algorithmic}[1]
\REQUIRE{输入}
\ENSURE{输出}
\STATE{语句}
\IF{条件}
\STATE{成立}
\ELSE
\STATE{不成立}
\ENDIF
\FOR{循环}
\STATE{循环体}
\ENDFOR
\RETURN{结果}
\end{algorithmic}
\end{algorithm}
\end{document}
Code language: TeX (tex)
💡 提示:关键字必须全大写,编译需要两次,中文需要 ctex 宏包!
速查表格式整理得蛮清楚
数学符号那部分帮大忙了
原来IF和FOR要大写啊,之前一直报错
我也被大小写坑过
刚好在写算法作业,有用!
REQUIRE和ENSURE原来是这么用的
之前我也一直搞混
自定义样式那段挺实用的
这表格排版挺清晰的,收藏了
原来行号参数是方括号里的数字
之前我也没注意到这个
写论文刚好卡这儿,太及时了
正好要用,mark了
同款操作,我也存了
这速查表救我命了,刚写论文卡在algorithmic语法😭