算法竞赛中的命名方式
hayzxjr
·
·
算法·理论
原作:@hzwer 原文链接:link
初稿成于 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:请忽略一些看起来与使用无关的问题。