【求助】数据结构的程序题都是怎么命名各种变量的

【求助】数据结构的程序题都是怎么命名各种变量的,第1张

程序没有既定的格式,当然一定要写得清晰啊。也就是要有良好的风格啊。一、程序内部文档应具备的规则 1、标识符应含有含义鲜明的文字。 含义鲜明的文字,能正确地提示程序对象所代表的实体。这对于帮助阅读者理解程序是非常重要的。如果用缩写的形式,那么缩写规则应该一致,并且应该给每个名字加注解。2、适当的注解 注解是程序员和程序读者通信的重要手段,正确的注解非常有助于对程序的理解。3、程序的视觉组织 程序的视觉组织可用阶梯式,结构化的程序风格对于我们实际编程也很有意义,可极大地改善代码的可读性。主要有代码注释和一致性缩进。 二、数据说明 数据结构的组织和复杂程序是在设计期间就已经确定了的,然而数据说明的风格却是在写程序时确定的。为了使数据更容易理解和维护,有一些比较简单的原则应该遵循。 1、数据说明的次序应该标准化。有次序就容易查阅。因此能够加速测试、调试和维护的过程。当多个变量名在一个语句中说明时,应按字母顺序排列这些变量。 2、数据结构复杂时,应加以说明其特点和实现方法。 三、语句构造 语句构造原则:每个语句应该简单而直接,不能为了提高效率而使程序变得过分复杂。下述规则的使用有助于语句简单明了。 1、不要为了节省空间把多行语句写在一行; 2、尽量避免复杂的条件测试; 3、尽量减少对“非”条件的测试; 4、避免大量使用循环嵌套和条件嵌套; 5、利用括号使逻辑表达式或算术表达式的运算次序清晰直观。 四、效率 效率三原则: 1、效率是性能的要求,需求分析时就应确定; 2、效率是靠设计提高的; 3、程序的效率和程序的简单程序是一致的。 运行时间 (1)写程序前先简化算术和逻辑表达式; (2)仔细研究嵌套的循环,以确定是否有语句从内层移到外层; (3)尽量避免使用多维数组; (4)尽量避免使用指针和复杂的表; (5)使用执行时间短的算术运算; (6)不要混合使用不同的数据类型; (7)尽量使用整数运算和布尔表达式 五、小结 其实风格是非常重要的,程序的外表是我们交流中不可缺少的东西。象我们常说的红颜命薄而归疚于外表太靓,也常听一些才子佳人的悲剧故事,提醒我们外表美而引出的一见钟情的浪漫不可取。可让人细想,才子佳人产生悲剧虽多,可也让人找到过心动和美好的感觉,做为一个人,活了一辈子,连那种感觉都未体验到,岂不比悲剧更加令人觉得可悲!编程亦然。

程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发 程序有时候越短,并不

一定越快,有时候程序很多代码,但不一定会很慢 性能是一把双刃剑, 获得时间效率的同时, 牺牲

的是空间的开销 这里提供一些建议以提高你的程序运行速度和减低系统荷载。

首先是尽量减少I/O *** 作,类似对硬盘的读写的I/O *** 作是最耗费时间的, 比如读写数据库。以下是

减少I/O *** 作的例子:

1, 减少数据库DB的读写 *** 作, 当使用VIEW视图的时候, 当被视图join的table有数据更新 *** 作的时

候, 同时系统也会更新到这个view里面, 使得它们之间的数据一样, 所以使用视图会对这些日常 ***

作带来效率问题 如果视图join的表多数是日常事物需要更新的事物数据表(如EKET), 就要避免

使用视图

2, 避免使用SELECT , 尽量使用SELECT A B C INTO TABLE ITAB这样的语句。这个 *** 作会将所有符

合条件的数据一次性地读进内表,这比在SELECT A B C INTO WA APPEND ENDSELECT的循环中

添加数据到内表要快。不用频繁的读DB

3, 避免频繁使用SELECT SINGLE语句, 特别是在LOOP和SELECTENDSELECT里面用, 应该把要读取

的数据用SELECT FOR ALL ENTRIES IN 一次全部取得, 然后用READ TABLE WITH KEY BINARY

SEARCH

虽然说 *** 作内存比磁盘 *** 作要高效,但是如果对内存的使用不加以控制,可能有些时候不得不对硬盘

的交换空间 *** 作, 这样就增加了对磁盘的I/O读写 *** 作正如下面所说:

4, 当你定义内表的时候可以也会出现这样的问题, 比如你定义一个内表使用的是OCCURS 100,而不

是OCCURS 0, 会导致内表长度大于100的时候,就会占用系统页面缓存。

5, Field-groups对于多层次的排序和显示是非常有用的。它是将数据写入系统的页面文件,而不是

内存(内表一般是使用内存的)。基于这个原因,field-groups比较适合于处理大量数据的列表(

一般超过50000条记录)。如果涉及大量的数据处理,应该首先和系统管理员协商来决定这个程序最

多能使用多少内存,以计算这个程序需要使用多少资源。然后你就可以决定是把数据写入内存还是

交换空间。

6, 用SORT代替ORDER BY, ORDER BY从句是执行在数据库服务器上, 而SORT是ABAP语句执行在应用服

务器上的 数据库服务器通常会形成性能瓶颈问题, 所以最好是吧数据导入内表做SORT

7, 避免使用SELECT DISTINCT语句, 因为当你用来判断唯一的字段为非索引字段时, 效率是十分的

低, 所以请导入内表SORT后, 使用DELETE ADJACENT DUPLICATES 来去重复

其次就是要减轻CPU的负载, 可以通过优化程序来改善,比如在程序中语句和算法, 以下是减低CPU

负载的优化例子:

1, 使用宏代替频繁函数调用 ABAP没有内联函数这个说法, 所以我们如果需要频繁调用函数时, 函

数调用有栈内存创建和释放的开销 在ABAP中可以用宏代码提高执行效率,宏代码不是函数但使用

起来像函数,编译器用复制宏代码的方式取代函数调用,省去了参数压栈、从而提高速度。注意使

用宏有缺点:(1)容易出错, 宏不能pass-by-value按值传递,用于代替实现函数功能时要十分注意!

(2)不可调试; (3)无法 *** 作类的私有数据成员

2, 避免使用过得的LOOP 和SELECT END SELECT 避免使用嵌套的LOOP 和SELECT END

SELECT

3, 尽可能多地使用表的KEY FIELD作为Where分句的条件选项。比如SELECT FROM BSEG WHERE

BUKRS = '1000' AND BELNR = '0100000007' AND GJAHR =

'2006' AND BUZEI = '003' 这里的四个字段BUKRS,BELNR,GJAHR,BUZEI 都

是BSEG表的KEY字段

4, 如果某些数据需要频繁的从不同表提取, 使用视图VIEW实现读取缓存可以提高效率 当视图连接

的是读取次数较多, 但写入不频繁的表时(比如物料主数据表MARA), 可以使用视图, 这样比在程序

里面简单用join要快,理论上join语句每次读取的速度都是一样的, 而视图是从读二次开始就快了,

而且cache使得网络负载减低

5, 使用SQL语句里面的JOIN时候, 应该避免JOIN的表不要超过3个, 否则严重影响效率 如果真的要

JOIN表3个以上的话, 正确的方法不是用视图VIEW, 而是使用SELECT INTO TABLE FOR ALL

ENTRIES IN 以及 READ TABLE WITH KEY BINARY SEARCH例如我们要提高读取BSEG表的性能,首先我

们会根据GJAHR主键从BKPF表取出部分数据到内表itab,然后使用FOR ALL ENTRIES IN itab WHERE

BSEG~BELNR = itab~BELNR 这样的的方法取得符合itab里所有条件的BSEG数据注意使用FOR ALL

ENTRIES要先CHECK作为条件的内表itab是否为空,还有作为WHERE的条件在这个内表里面是否会有空

值存在,否则无效

6, 注意使用CORRESPONDING FIELDS OF 和 MOVE-CORRESPONDING 时候会进行字段比较, 带来CPU的

开销大

7, 避免过得而频繁的数据类型转换,比如N转换为C,但是从N转换成STRING却是很快的,因为 *** 作

STRING比CHAR类型少了比较长度的时间

8, 使用二级索引提高DDIC的读写效率, 可以根据你的需要在SE11里面创建INDEX, 并让你程序里的

SQL查询语句里WHERE条件的顺序与你的索引顺序一致

9, 二分查找比线性查找要高效,READ TABLE的之前使用SORT TABLE BY XXX 某个表关键字段进行排

序, 然后使用READ TABLE WITH KEY XXX = 'XXX' BINARY SEARCH 这个就是所谓的二分

查找法的应用

10, 避免使用SQL语句动态查询条件,动态表名和动态字段名, 必要时候用宏或者子程序模块代替

11, 对于同一功能的函数和方法, 调用METHOD比调用FUNCTION要快

12, SORTED TABLE可以使用二分查找法取得节点, 其时间复杂度是O(log N),但是插入节点会慢,因

为要移动很多节点 而HASHED TABLE则是基于哈希算法的,其高效主要体现在把数据的存储和查找时

间大大降低,几乎可以看成是常数时间O(1),而代价是消耗比较多的内存,然而在硬件技术越来越

发达的今天,用空间换时间的做法在某种意义上是值得的。但是使用哈希表必须注意键值的唯一性

!如果键值会出现重复的话, 不能使用哈希表,只能用排序表和标准表。

13, 使用APPEND LINES(或者INSERT LINES) OF ITAB1 TO ITAB2 比 LOOP AT ITAB1 INTO WA

APPEND(INSERT) WA TO ITAB2 ENDLOOP 要高效

14, 使用效率比较高的COLLECT, DELETE ADJACENT DUPLICATES FROM语句。

15, 使用高效的CONTEXT SQL语句如以下代码2比代码1要快10倍以上!

代码1:

SELECT FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS

SELECT SINGLE AIRPFROM AIRPTO INTO (AP1, AP2)

FROM SPFLI

WHERE CARRID = SBOOK_WA-CARRID

AND CONNID = SBOOK_WA-CONNID

SELECT SINGLE NAME INTO NAME1 FROM SAIRPORT

WHERE ID = AP1

SELECT SINGLE NAME INTO NAME2 FROM SAIRPORT

WHERE ID = AP2

ENDSELECT

代码2:

SELECT FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS

SUPPLY CARRID = SBOOK_WA-CARRID

CONNID = SBOOK_WA-CONNID

TO CONTEXT TRAV1

DEMAND AIRPFROM = AP1

AIRPTO = AP2

NAME_FROM = NAME1

NAME_TO = NAME2

FROM CONTEXT TRAV1

ENDSELECT

最后是注意内存的使用,以下是内存优化方面的例子:

1, 虽然ABAP拥有垃圾处理的机制, 但是这个是在程序运行完成后实现的 所以我们尽量把无用的变

量,内表,对象都释放掉;

2, 尽量减少无用的静态定义的变量,内表和对象, 因为静态定义的对象会在编译开始就占有内存空

间;

3, 尽量减少网络的传输负载, 比如在设计RFC远程调用传回的内表数据要尽量精简, 数据量越大,对

CPU和内存需求越多;

4, 内存使用紧张的情况下, 使用FREE语句, 以及SQL语句的PACKAGE SIZE n 选项

SELECT vbeln erdat

FROM vbak

INTO TABLE li_vbak PACKAGE SIZE 50

这是仁者见仁,智者见智的事情。

一般来说强调可维护性,是因为要使程序的生命力强,就需要长时间不断的维护和持续优化(修改BUG和增强功能),有时甚至会经历几代程序员之手。这时如果维护性差,会使后来者学习成本大大升高,相应的也更容易出错。

算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 一个算法应该具有以下五个重要的特征: 1、有穷性: 一个算法必须保证执行有限步之后结束; 2、确切性: 算法的每一步骤必须有确切的定义; 3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件; 4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 计算机科学家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。 [编辑本段]算法的复杂度 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。 时间复杂度 算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做 T(n)=Ο(f(n)) 因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。 空间复杂度 算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。 详见百度百科词条"算法复杂度" [编辑本段]算法设计与分析的基本方法 1递推法 递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。 2递归 递归指的是一个过程:函数不断引用自身,直到引用的对象已知 3穷举搜索法 穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。 4贪婪法 贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。 5分治法 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 6动态规划法 动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。 7迭代法 迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法。 [编辑本段]算法分类 算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法。 算法可以宏泛的分为三类: 有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。 有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。 无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。

以上就是关于【求助】数据结构的程序题都是怎么命名各种变量的全部的内容,包括:【求助】数据结构的程序题都是怎么命名各种变量的、如何提高ABAP程序运行效率、为什么说程序的可理解性和可维护性往往比程序效率更为重要等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9710371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存