首页 > 编程语言 >关于算法竞赛中标识符命名的几点建议

关于算法竞赛中标识符命名的几点建议

时间:2023-10-11 15:45:53浏览次数:39  
标签:变量 字母 后缀 可以 算法 命名 几点 标识符 含义

头图

一张头图

 

引言

标识符命名,一个 OIer 每天都在做,却基本从未在意过的操作。

好的命名,既可以提高自己的调试效率,也可以提高代码可读性。

方便自己,也方便别人。

如果你觉得自己的代码不是很美观,又觉得码风已经定型,不如继续往下看,说不定可以让你的码风更进一步。

欢迎 @ 你身边有需要的朋友。

(注:本文仅为建议,具体还请结合自身习惯)

 

变量,常量及数组命名

一、选择长度适当的命名

如果命名太短,无法表示太多含义。因为缩写的重复率过高,导致变量或函数的具体含义很难区分。

如果命名太长,含义确实足够丰富,但会大大增加编码长度及调试难度,且不知道哪里会打错一部分。

一般选择 2 - 3 个字母的命名为宜。

以三个字母为例,可以选择一个英文单词的前三个字母,比如 col(color), num(number), ans(answer), tot(total) ……

还可以将一个长单词中的元音及重复字母删去,或者保留你喜欢的字母,比如 cnt(count), tmp(template), rmb(remember), knd(kind)……

二、尽量不要选择中文拼音

原因有几点:

  1. 中文中同音字过多,且前后鼻音,平翘舌音,对特殊地域 OIer 不太友好。(本人就不太能分清前后鼻音)
  2. 如果使用中文缩写,会出现许多歧义,例如 zdz 你能很快反应过来它是 最大值 的意思吗
  3. 同时,因为使用中文缩写的人很少,如果你这么写的话,其他人很难理解你的代码。

三、尽量减少无意义命名

例如 a, b, c, d 这样的命名,因为是按顺序延续,所以具体含义每个题都不一样,尽量不要使用,避免混淆。

不过,一些临时中转变量,因为本身就没有含义,那么这时候还是简单为好。

或者自己在稿纸上推算时便是如此写的,那么落实在代码上还是不要更改为好。

请记住,满篇 y, w, v, c, o 很让人崩溃(无论你是否知道它们都是什么含义)。

四、有一些表示固定含义的变量

有一些算法和数据结构中用到的特殊变量,你可以给他们分配一个不容易冲突,且含义明确的名字。

永远只有这一个变量可以起这样的名字。

比如分块中的块长,你可以给它命名为 block, 因为使用的次数很少,可以定长一些。

邻接表存图中的计数器,可以命名为 cnte, 显然其他地方很少会用到这样的名字。

同时,类似的,一些含义非常多的,给它加一个特殊后缀区分是一个好方法

五、小 trick

  1. 善用 for 语句临时变量,不止可以有 i, j, k 这几种,枚举不同的量可以用 u, v, w, d 之类的首字母。
  2. 给数字常量起名字,如数据的最大值可以叫 Maxn, 0/1 之类的下标可以用 ls,rs 之类(可以了解 enum)。
  3. 不要使用多个相同字母,可以通过添加后缀区分,如 ans1, ans2, 而不是 ans, anss。
  4. 可以使用一些大写的单个字母,如 N, M, K, T, Q 等

函数命名

 六、与数组名有关联

例如有一个数组名为 dis, 那么处理此数组的函数就可以叫 GetDis() 或 solveDis()。

七、使用不同后缀区分

有时候多个函数实现的是相似的功能,比如查询函数。

此时需要不同的后缀(也可以是前缀,后缀更常见)来区分。

例: query_ct(),  query_pt(), query_nd() 分别是查询子树内信息,查询路径上信息,查询单点信息。

八、同上

和 变量,常量及数组命名 类似,函数命名也需要注意

  1. 长度,此时以 3 - 7 个字符为宜。
  2. 不适用中文拼音。
  3. 保持有意义命名。

等问题

 

其他

九、驼峰命名法

在一个命名中,根据意义常常会分为若干个部分, 如 get dis(), push up(), push down(), l mx, r mx 等等。

那么,为了提高区分度,以及增添美感,我们可以将每个部分的首字母大写,称为 大驼峰命名法,例如上面的名字,我们可以改为

  GetDis(), PushUp(), PushDown(), LMx, RMx

如果整个单词的首字母不大写,则称为 小驼峰命名法。那么上面的名字,我们可以改为

  getDis(), pushUp(), pushDown(), lMx, rMx

十、下划线分割命名法

与上面类似,只不过部分之间以下划线分割。

仍然是上面的例子

  get_dis(), push_up(), push_down(), l_mx, r_mx

 

可以同时使用不同的命名法,以增加命名美感及区分度。
具体采用哪种可以根据个人习惯。

 

结语

实际上,无论使用哪种命名,最重要的是代码逻辑。

名字只是锦上添花,切不可本末倒置,过分追求命名。

祝大家都能拥有人见人懂的码风,感谢。

 

如对文章有任何问题请私信作者 @qkhm .

标签:变量,字母,后缀,可以,算法,命名,几点,标识符,含义
From: https://www.cnblogs.com/qkhm/p/17755178.html

相关文章

  • C++ - STL算法
    5STL-常用算法 概述:算法主要是由头文件<algorithm><functional><numeric>组成。 <algorithm>是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数<funct......
  • Lnton羚通视频分析算法平台保障工人安全智慧工地安全帽解决方案
    Lnton羚通的算法算力云平台是一款出色的解决方案,具备突出的特点。该平台提供高性能、高可靠性、高可扩展性和低成本的功能,使用户能够高效地执行各种复杂的计算任务。此外,平台还提供了丰富的算法库和工具,支持用户上传和部署自定义算法,提高了平台的灵活性和个性化能力。在工地现场,由......
  • 浅谈视频智能分析预警 事件识别算法硬件智能分析网关V2版的功能 及其智能分析网关V1版
    智能分析网关V1版本和智能分析网关V2版本相比,不仅在硬件外观上有所改变,而且在算法类别上也增加了一些新的内容。因此,今天我们将重点介绍智能分析网关V2版本的相关特性。智能分析网关V2是一种先进的数据处理设备,它融合了云计算、物联网和人工智能技术,主要应用于工业生产环境中......
  • 类欧几里得算法
    快速求解\[f(a,b,c,n)=\sum_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\]若\(\max(a,b)\gec\)\[设s_0(n)=n+1,s_1(n)=\frac{n(n+1)}{2},s_2(n)=\frac{n(n+1)(2n+1)}{6}\sum_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor=\sum_{i=0}......
  • 10.11算法
    买卖股票的最佳时机给定一个数组prices,它的第 i个元素 prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不......
  • 每天一算法,脑子不生锈(真押韵)
    前言看算法确实会让编码思路有所不同,看完好的方案,就会觉得自己的很low。今年开始尽量每天一道算法题,卷死自己,长期更新Question给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合......
  • 并查集的实现【学习算法】
    并查集的实现【学习算法】前言版权推荐并查集的实现最后前言2023-9-2614:38:02以下内容源自《【学习算法】》仅供学习交流使用版权禁止其他平台发布时删除以下此话本文首次发布于CSDN平台作者是CSDN@日星月云博客主页是禁止其他平台发布时删除以上此话推荐算法讲解056【必备】并......
  • 谈谈"求线段交点"的几种算法(js实现,完整版)
    谈谈"求线段交点"的几种算法(js实现,完整版)"求线段交点"是一种非常基础的几何计算,在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说,希望对大家有所帮助. 本文讲的内容都很初级,主要是面向和我一样的初学者,所以请各位算法帝......
  • Java算法之动态规划详解
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事......
  • 《算法学习专栏》——DP问题之线性DP
    2023年10月10日更新于2023年10月10日一、前言本栏,为线性DP,题目主要来源日常,目前主要来源于Acwing的提高课。希望以后做到线性DP的题目,也能加进来,不断完善。二、线性DP2.1目前的模型:数字三角形模型最长上升子序列模型2.2目前解决的问题:可以解决路径上的各种值。解决......