算法第一章作业

华为之代码规范

/*

声明:

以下内容的参考资料:华为代码综合规范文档 - 百度文库 (baidu.com)

以下文章摘录了我自己平时写代码没有注意到的点。

*/

一、代码排版规定

1.程序块要采用缩进风格编写,缩进空格数为4个。

2.相对独立程序块之间、变量阐明之后必要加空行。

3.较长语句(>80字符)要提成多行书写(在循环、判断等语句中的较长表达或者语句也是如此),长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出新行要进行恰当缩进,使排版整洁,语句可读。

4.若函数或者过程中参数过长,要进行恰当划分。

5.不允许把各种短语句写在一行中,即一行只写一条语句。

6.if, for, do, while, case, switch, default等语句自占一行,且无论语句多少都要加花括号{}。

7.对齐只使用空格键,不使用TAB键。

8.函数或过程开始、构造定义及循环、判断等语句中的代码都要采用缩进风格,case语句下状况解决语句也要遵从语句缩进规定。

9.程序块分界符(如C/C++语言大括号'{'和'}')应各独占一行并且位于同一列,同步与引用它们语句左对齐。在函数体开始、类定义、构造定义、枚举定义以及if、for、do、while、case、switch、case语句中程序都应该采用上述缩进方式。如下是正确的:

if条件)
{
    ...
}
else
{
    ...
}

10.两个以上核心字、变量、常量进行对等操作时,它们之间操作符之前、之后或者先后要加空格;进行非对等操作时,如果是关系密切纪实操作符(如-->),后不应加空格。

二、注释规范

1.普通状况下,源程序有效注释量必须在20%以上。

2.注释内容要清晰、明了,含义精确,防止注释二义性。

3.避免在注释中使用缩写。

4.注释应与其描述代码相近,对代码注释应放在其上方或右方(对单条语句注释)相邻位置,不可放在下面,如放于上方则需与其上面代码空行隔开。

5.对于所有有物理含义的变量、常量,如果其命名不是充分自注释,在声明时都必须加以注释,阐明其物理含义。变量、常量、宏注释应放在其上方相邻位置或右方。

6.数据构造声明(涉及数组、构造、类、枚举等),如果其命名不是充分自注释,必要加以注释。对数据构造注释应放在其上方相邻位置,不可放在下面;对构造中每个域注释放在此域右方。

7.全局变量要有详细注释,涉及对其功能、取值范畴、哪些函数或过程存取它以及存取时注意事项等阐明。

8.注释应与所描述内容进行同样缩排。

9.将注释与其上面代码用空行隔开。

10.对变量定义和分支语句(条件分支、循环语句等)必要编写注释。

11.避免在一行代码或者表达式中间插入注释。

12.通过对函数或过程、变量、构造等对的命名以及合理地组织代码构造,使代码成为自注释。

13.在代码功能、意图层次上进行注释,提供有用、额外信息。

14.在程序块结束行右方加注释标记,以表明某程序块结束。

15.阐明性文献头部应进行注释,注释必要列出:版权阐明、版本号、生成日期、作者、内容、功能、与其他文献关系、修改日记等,头文献注释中还应有函数功能简要阐明。

16.源文献头部应进行注释,列出版权阐明、版本号、生成日期、作者、模板功能、重要函数及其功能、修改日记等。

17.函数头部应进行注释,列出:函数目/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

18.注释格式尽量统一,建议使用/*......*/。

19.注释应考虑程序易读及外观排版因素,使用语言若是中、英兼有,建议多使用中文,除非能用非常流利精确英文表达。

三、标记符命名规范

1.标记符命名要清晰、明了,有明确含义,同步使用完整单词或人们基本可以理解的缩写,避免使人产生误解。

如下单词缩写可以被人们基本承认:

temp 可缩写为 tmp; flag 可缩写为 flg

2.命名中若使用特殊商定或缩写,要有注明阐释。

3.自己特有命名风格,要自始至终保持一致,不可来回变化。

4.对于变量命名,禁止取单个字符(如i, j, k, ...),建议除了要有详细含义外,还能表明其变量类型、数据类型等,但i, j, k作局部循环变量是容许的。

5.变量命名要与所使用的系统风格保持一致。

6.在同一软件产品内,应规划好接口某些标记符命名,防止编译、链接时产生冲突。

7.用对的反义词组命名具备互斥意义变量或相反动作函数等。

四、可读性

1.不要使用难懂技巧性很高的语句。

 

 

《数学之美-第8章 简单之美—布尔代数与搜索引擎-读后感》

关于《数学之美》这本书,我还未上大一之前的暑假就看过一些,但由于当时对计算机的知识储备几乎为0,所以有好些东西没看懂,看得云里雾里的。我翻了翻以前边看这本书边做下的笔记,如下:

       前阵子读了一点《数学之美》。首先,正如书名那样,本书让我感受到了数学在造福于人类不可或缺的力量,激励着我努力学习,施展自己的才智,为人民谋福祉,为祖国发展奉献自己的一份力量。再者,作者总能用贴近生活实际的例子、生动贴切的比喻,把与计算机相关方面的术语讲得十分透彻,让我们可感可知、更好得理解那些抽象的术语。譬如,通过讲述古人用文言文记载,却用白话文交谈的事例为读者阐明了为什么要压缩、解压,以及什么是信道传输;用图文解析让读者对“通信”这一动态词语有了深层次的理解……我觉得作者能做到这一点与他深刻理解了术语概念以及博览群书离不开。同时,本书引领着我更深入地思考了那些我们日常总是接触的、极大地便捷我们生活的应用(如搜索引擎、机器翻译、语音识别、手写体识别)背后的原理。如网页搜索实质上是利用信息消除不确定性的过程。       

       现在看以前写的这段文字,自己感觉写得很虚,没有写出什么。

      今天,我又翻起了这本书,我看了看目录,直观的感受是,不懂的术语少了很多。由于自己最近对搜索引擎挺感兴趣,我决定翻看第8章 简单之美—布尔代数与搜索引擎。

      在翻看第8章之前,我从来没有想过搜索引擎和布尔代数会有关系。在我看来,搜索引擎是一个非常复杂的工程,而布尔代数不就是0和1的简单东西吗,这么简单的东西能给搜索引擎做什么事?带着好奇的心,我翻开了第8章。

      在本章中,我首先宏观地了解了布尔代数的数学知识以及发展历史,以及了解到建立一个搜索引擎大致需要做的三件事:自动下载尽可能多的网页、建立快速有效的索引、根据相关性对网页进行公平准确的排序,即下载、索引和排序。作者讲到索引是最重要的,最基础的。而布尔代数正和搜索引擎中的索引息息相关。看完本章,解决了我刚开始的疑惑,我明白了布尔代数原理在搜索引擎中当担的角色作用是:用布尔代数的两个真值0和1代表一篇网页是否包含用户查询的关键字,0表示不包含,1表示包含。这就是最核心的原理部分,是最根基的。再者,布尔代数还有一个与生俱来的优势,就是计算机在做布尔运算是非常快的。在文章中,作者说:“现在最便宜的微机都可以在一个指令周期内进行32位布尔运算,一秒进行数十亿次以上”。可想而知,运算速度之快,这极大地满足大数据快速处理的需求。然而,放到实际情况的角度去考虑,还有更多的细节譬如如何管理巨量的网页数据,如何使查询在秒级内实现等都是需要我们去考虑。在本章中,我同样很开心的看到作者有谈及这些细枝末节,提点了在搜索引擎界这些问题的想法和解决实现。

       首先,在信息科技快速发展的当下社会,网页资源数据越来越多。想要在秒级满足用户的搜索查询需求,直接对网页逐一全文本扫描并与搜索关键字匹配的方法显然不行,因为可想而知,它效率非常得低。解决的方法是建索引,在这里,作者用图书馆给每本书做索引卡的实际生活例子做解释,通俗易懂地让我明白了建索引这种方法的可行性、高效性。再者,再深入地想想搜索这件事,如果仅仅是检索网页是否含有用于搜索的关键字,这种单一的判断会导致最后的搜索结果不尽人意,不满足客户需求这是一个很大的问题。根据文章,作者提到改进的方法是在索引中增加更多的附加消息,如每个词出现的位置、次数,等等。然后,增加这些附加消息又会导致其他问题——是的整个索引变大,需要更多的内存。文章中提到解决这一问题的方法是:通过分布式的方式存储到不同的服务器上,普遍的做法就是根据网页的序号将索引分成很多份,分别存储于不同的存储器。

        在本文中,我还了解到了一点搜素引擎的发展历史。布尔代数是19世纪英国的一位数学家布尔(George Boole)提出的,在布尔代数被提出后的80年时间里,布尔代数没有被发掘出什么实在的应用,直到1938年香农的硕士论文指出用布尔代数实现开关电路,此后,布尔代数开始被发掘出更多的应用。早期的文献检索查询系统,严格要求查询语句符合布尔运算。而今天,搜索引擎会自动把用户的查询语句转换成布尔运算布尔运算算式。

       这篇文章是讲数学理论中的某个点(布尔代数)的实际用处(用于搜索引擎),这让我想起我之前打数模比赛的经历,作者在文章中讲到一句话:“数学的发展实际上是不断地抽象和概括的过程,这些抽象了的方法看似离生活越来越远,但是他们最终能找到适用的地方,布尔代数便是如此。”,这句话我深有同感,在打数模比赛的过程中,我和我的组员们面对的问题同样是一个实际问题,需要我们用我们学过的很多朴素的数学知识对实际问题建模求解,并对细节加以讨论改进分析。数学在我看来是一个非常强大的工具,那些看似抽象的极度脱离现实的概括理论,当我们结合实际生活细细一想,会发现其魅力是无穷的,是能帮助我们解决实际问题的,是和现实生活息息相关的。

       本文小结中引用了牛顿的一句话:“(人们)发觉真理在形式上从来是简单的,而不是复杂和含混的。”(Truth is ever to be found in simplicity, and not in the multiplicity and confusion of things.)。这句话给了我一点启迪:在面对一个复杂的问题时,应该要深入地思考问题的本质,当我们考察完问题的本质时,会发现问题没有一开始直接感知的那么复杂了。

posted @ 2021-09-29 18:36  xiaomeiman  阅读(37)  评论(0编辑  收藏  举报