算法竞赛中的命名方式
初稿成于 2024 / 08 / 10
本文在原文基础上略有修改。
注:本文提到的命名方式只涉及最基础的语法运用,至于使用各种语法糖的选手应该也用不到本文。
众所周知,乱写变量名会降低代码可读性。
更重要的是个人经验。
随意命名、约定俗成
对于循环变量:\(\texttt{i}\)、\(\texttt{j}\)、\(\texttt{k}\)
对于 queue、priority_queue、deque:\(\texttt{p}\)、\(\texttt{q}\)
对于 struct:\(\texttt{node}\)(有时根据用法写 \(\texttt{SMT}\)、\(\texttt{Edge}\) 等等)
按作用命名
对于大部分变量,我们按照其作用、意义进行命名,但为防止与保留字冲突(主要是懒),通常不写完整单词,而是进行缩写 / 大小写转化,以下是一些常用缩写:(解释说明中的单词不一定不可用,且只保证板块内无重复)
算法关键变量
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{dp}\) | 动态规划(\(\texttt{DP}\)) |
| \(\texttt{mst}\) | 最小生成树(\(\texttt{MST}\)) |
| \(\texttt{scc}\) | 强连通分量(\(\texttt{SCC}\)) |
| \(\texttt{Hash}\) | 哈希表(\(\texttt{hash}\)) |
通用
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{cmp / comp}\) | 比较(\(\texttt{compare}\)) |
| \(\texttt{cnt}\) | 计数器(\(\texttt{count}\)) |
| \(\texttt{cur}\) | 当前量(\(\texttt{current}\)) |
| \(\texttt{del}\) | 删除(\(\texttt{delete}\)) |
| \(\texttt{delta}\) | 增量(\(\texttt{delta}\)) |
| \(\texttt{update}\) | 更新(\(\texttt{update}\)) |
| \(\texttt{use / used}\) | 使用(\(\texttt{use / used}\)) |
| \(\texttt{val}\) | 值(\(\texttt{value}\)) |
| \(\texttt{ret}\) | 返回值(\(\texttt{return}\)) |
| \(\texttt{sum}\) | 和(\(\texttt{sum}\)) |
| \(\texttt{num}\) | 数量(\(\texttt{number}\)) |
| \(\texttt{tot}\) | 总数(\(\texttt{total}\)) |
| \(\texttt{t / tim}\) | 时间(\(\texttt{time}\)) |
| \(\texttt{tmp}\) | 临时量(\(\texttt{temporary}\)) |
| \(\texttt{ans}\) | 答案(\(\texttt{answer}\)) |
| \(\texttt{flag}\) | 标志(\(\texttt{flag}\)) |
| \(\texttt{from}\) | 来自(\(\texttt{from}\)) |
| \(\texttt{get}\) | 得到(\(\texttt{get}\)) |
| \(\texttt{vis}\) | 访问(\(\texttt{visit}\)) |
| \(\texttt{siz}\) | 大小(\(\texttt{size}\)) |
| \(\texttt{start}\) | 开始(\(\texttt{start}\)) |
| \(\texttt{pos}\) | 位置(\(\texttt{position}\)) |
| \(\texttt{query / ask}\) | 询问(\(\texttt{query / ask}\)) |
| \(\texttt{res}\) | 结果(\(\texttt{result}\)) |
| \(\texttt{bel}\) | 属于(\(\texttt{belong}\)) |
| \(\texttt{best}\) | 最佳的(\(\texttt{best}\)) |
| \(\texttt{block}\) | 障碍(\(\texttt{bolck}\)) |
| \(\texttt{chk / check}\) | 判定(\(\texttt{check}\)) |
| \(\texttt{col / color}\) | 颜色(\(\texttt{color}\)) |
| \(\texttt{diff}\) | 差别(\(\texttt{dirrerence}\)) |
| \(\texttt{div}\) | 部分(\(\texttt{division}\)) |
| \(\texttt{extra}\) | 额外的(\(\texttt{extra}\)) |
| \(\texttt{ind}\) | 标号(\(\texttt{index}\)) |
| \(\texttt{inf}\) | 无穷大(\(\texttt{infinity}\)) |
| \(\texttt{init}\) | 初始化(\(\texttt{initialize}\)) |
| \(\texttt{len}\) | 长度(\(\texttt{length}\)) |
| \(\texttt{low}\) | 下边的(\(\texttt{lower}\)) |
| \(\texttt{mid}\) | 中间量(\(\texttt{matrix}\)) |
| \(\texttt{res / rest}\) | 剩余(\(\texttt{residual / rest}\)) |
序列 / 链表
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{pre}\) | 前驱(\(\texttt{precursor}\)) |
| \(\texttt{suc}\) | 后继(\(\texttt{succeed}\)) |
| \(\texttt{pre}\) | 前缀(\(\texttt{prefix}\)) |
| \(\texttt{suf}\) | 后缀(\(\texttt{suffix}\)) |
| \(\texttt{nxt}\) | 后继(\(\texttt{next}\)) |
| \(\texttt{len}\) | 长度(\(\texttt{length}\)) |
| \(\texttt{to}\) | 表目的(\(\texttt{to}\)) |
| \(\texttt{ins / insert}\) | 插入(\(\texttt{insert}\)) |
| \(\texttt{inv / rev}\) | 翻转(\(\texttt{inverse / reverse}\)) |
| \(\texttt{las / last}\) | 最后一个(\(\texttt{last}\)) |
图论
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{ver}\) | 顶点(\(\texttt{vertex}\)) |
| \(\texttt{edge}\) | 边(\(\texttt{edge}\)) |
| \(\texttt{in}\) | 入边 / 度(\(\texttt{in}\)) |
| \(\texttt{out}\) | 出边 / 度(\(\texttt{out}\)) |
| \(\texttt{nxt}\) | 后继(\(\texttt{next}\)) |
| \(\texttt{to}\) | 表目的(\(\texttt{to}\)) |
| \(\texttt{deg}\) | 度数(\(\texttt{degree}\)) |
| \(\texttt{dep}\) | 深度(\(\texttt{depth}\)) |
| \(\texttt{dis / dist}\) | 距离(\(\texttt{distance}\)) |
| \(\texttt{siz}\) | 大小(\(\texttt{size}\)) |
| \(\texttt{g / gra}\) | 图(\(\texttt{graph}\)) |
| \(\texttt{t / tr}\) | 树(\(\texttt{tree}\)) |
| \(\texttt{flow}\) | 流(\(\texttt{flow}\)) |
| \(\texttt{anc}\) | 祖先(\(\texttt{ancestor}\)) |
| \(\texttt{fa}\) | 父亲(\(\texttt{father}\)) |
| \(\texttt{son}\) | 儿子(\(\texttt{son}\)) |
| \(\texttt{col / color}\) | 颜色(\(\texttt{color}\)) |
数据结构 / \(\text{STL}\)
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{stk / sta}\) | 栈(\(\texttt{stack}\)) |
| \(\texttt{heap}\) | 堆(\(\texttt{heap}\)) |
| \(\texttt{que}\) | 队列(\(\texttt{queue}\)) |
| \(\texttt{inq}\) | 在队列里(\(\texttt{inq}\)) |
| \(\texttt{instk}\) | 在栈中(\(\texttt{instk}\)) |
| \(\texttt{str}\) | 字符串(\(\texttt{string}\)) |
| \(\texttt{ch}\) | 字符(\(\texttt{char}\)) |
| \(\texttt{mp}\) | 映射(\(\texttt{map}\)) |
| \(\texttt{vec}\) | 向量(\(\texttt{vector}\)) |
| \(\texttt{build}\) | 建立(\(\texttt{build}\)) |
| \(\texttt{modify}\) | 修改(\(\texttt{modify}\)) |
| \(\texttt{ins / insert}\) | 插入(\(\texttt{insert}\)) |
| \(\texttt{merge}\) | 合并(\(\texttt{merge}\)) |
| \(\texttt{split}\) | 分裂(\(\texttt{split}\)) |
| \(\texttt{rnk / rank}\) | 排名(\(\texttt{rank}\)) |
数学
| 常用写法 | 解释说明 |
|---|---|
| \(\texttt{lim}\) | 极限(\(\texttt{limit}\)) |
| \(\texttt{rnk / rank}\) | 秩(\(\texttt{rank}\)) |
| \(\texttt{mat}\) | 矩阵(\(\texttt{matrix}\)) |
| \(\texttt{prod}\) | 乘积(\(\texttt{product}\)) |
| \(\texttt{fac / factor}\) | 因子(\(\texttt{factor}\)) |
| \(\texttt{delta}\) | 增量、判别式(\(\texttt{delta}\)) |
| \(\texttt{add}\) | 加(\(\texttt{addition}\)) |
| \(\texttt{sub}\) | 减(\(\texttt{substraction}\)) |
| \(\texttt{mul}\) | 乘(\(\texttt{multiply}\)) |
| \(\texttt{div}\) | 除(\(\texttt{division}\)) |
| \(\texttt{mod}\) | 模(\(\texttt{modulo}\)) |
| \(\texttt{pri / prime / ispri}\) | 质数(\(\texttt{prime}\)) |
| \(\texttt{vec}\) | 向量(\(\texttt{vector}\)) |
注 \(1\):事实上,随着 \(\texttt{C++}\) 体系的不断更新(主要是竞赛支持的语法换代),一些单词可能也会变成不可使用的。因此,更重要的是在不断地错误中积累经验。(不要在赛场积累就对了)
注 \(2\):上表大部分内容源自原文,笔者也补充了一部分自己见过的、用过的,关键还是看个人习惯。部分内容比较突兀而未加解释,但笔者认为这并不重要。
注 \(3\):请忽略一些看起来与使用无关的问题。

浙公网安备 33010602011771号