算法竞赛中的命名方式

原作:@hzwer 原文链接:link

初稿成于 2024 / 08 / 10

本文在原文基础上略有修改。

注:本文提到的命名方式只涉及最基础的语法运用,至于使用各种语法糖的选手应该也用不到本文。

众所周知,乱写变量名会降低代码可读性。

更重要的是个人经验。

随意命名、约定俗成

对于循环变量:\(\texttt{i}\)\(\texttt{j}\)\(\texttt{k}\)

对于 queuepriority_queuedeque\(\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\):请忽略一些看起来与使用无关的问题。

posted @ 2024-08-10 23:10  hayzxjr  阅读(167)  评论(0)    收藏  举报