- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法合集之《解決空间规模问题的几种常用的存储结构》
解决空间规模问题的几种常用的存储结构
广西柳州铁路第一中学 龙翀
【关键字】空间规模、存储结构
【摘要】空间规模型问题是近年来国际国内比赛的热点。这类问题对选手们掌握运用各种数据存储结构的能力提出了更高的要求,本文站在解决空间规模型问题的角度,深入分析了几种常用的数据存储结构,在这一类特殊问题当中表现出来的一些新的特点,总结了链式结构中的单链表、双链表和树型结构,矩阵结构各自的长处和短处,特别是通过一题多解比较说明了矩阵结构具有很大的潜力。论文对三道国际国内竞赛题作了详细的分析总结,这对于参加国际或国内比赛的选手来说具有很强的现实意义
正文
一、引论
“规模”一词在《现代汉语词典》里的解释为“某一事物包括的范围”,而在计算机程序设计中,我们可以把它理解为程序运行时在空间和时间等方面的开销。它主要包括两个方面:空间规模和时间规模。它们都是在设计算法、编制程序时经常要考虑到的问题。存储结构,就是数据元素和元素之间的关系在计算机中的表示,它是为解决空间规模问题,或是通过解决空间规模问题间接地解决时间规模问题而总结的一些存储方法。
近年来,在信息学竞赛中出现了一类新型问题,这些问题的共同特点就是输入数据非常之大,可达到1M甚至几M,我们不妨称这类问题为空间规模型问题。众所周知,用Turbo Pascal编程时仅使用最大为640K的常规内存,而仅凭这点有限的内存完全不可能把它们一一都存下来,这给我们对数据存储结构和以及设计算法提出了更高的要求。(见注1)
程序是算法和数据结构的有机结合,而本文着重从数据结构的角度出发,针对数据规模型问题,重新研究一下几种常用的存储结构的运用情况和它们体现出来的新的特点。
二、几种常用的数据结构
通过对国际国内比赛中关于这类问题的存储结构模式进行仔细的研究,我发现解决这类问题常用的存储结构有三类:链式结构、树型结构和矩阵结构。下面我就这三种结构一一来分析它们在这类问题中的应用情况,并比较它们各自的优点和缺点。
链式结构
在链式结构中常用的两种是单链表和双链表,我们先从一个简单的例子说起。
【问题1】最佳游览路线(NOI’97第二试第一题)
某游览区街道成网络状,东西向的街道是旅游街,只能由西向东走,并有一定的分值,南北向的街道是林荫道,既可从南向北走,也可从北向南走,没有分值,要求从某一路口开始游览,并在另一路口结束游览,使所走过的街道分值总和最大。其中1≤旅游街道数目≤100,1≤林荫道数目≤20001,-100≤分值≤100。
【分析】初看起来,此题规模非常可怕(100*20001=2000100),我们不可能存下如此庞大的规模。但细想起来,由于只能由西向东走,所以说每一纵行至多只能通过一次,而对于同一纵行的旅游街,我们可以通过林荫道自由到达任意一条旅游街,为了达到题目最佳的要求,我们只需走分值最大的街道就可以了,因此在存储时只需记录每一纵行中最大的分值即可,这样存储结构由二维变成一维,所用空间为20001个shortint。再进一步分析,可以发现:若A-B是一条最佳浏览线路,C是A-B中间一点,那么在子线路A-C上的分值一定非负,否则C-B的分值一定大于A-B的分值。
定义Pi为以i结尾的最优路径分值的总和,Ai表示第I纵行的最大分值,我们可以得到一个状态转移方程:
边界条件:P0=0
目标:求Max{Pi}
通过转化,我们就可以在读文件的同时将二维数据转化为一维,然后先从P1算起,每算一次Pi只需作一次判断,计算完Pi后又立即转入Pi+1的计算,直至处理完所有元素为止(见程序1)。我们可以把它的结构表示:
这就是我们熟知的单链表,它在问题中表现为:对于处理当前的元素,无需回头查找在此之前的元素(因为前边的元素对它影响有限,可直接用几个变量表示出来)。对于这种表现,可以总结出单链表结构对于解决空间规模数据问题的特点:
效率高,用此结构编出来的程序正常情况下一般不会存在时间问题。道理很简单,因为对于每一个元素的处理只进行极有限的几次运算,复杂度较低(见注2);
由于单链表结构过于简单,在具体算法设计中对元素之间逻辑关系反映不够(只有在相邻元素之间有一条单向边),所以说单链表结构在解题时有很大的局限性,对于难度较大的题目则很难用它来实现。但是作为如此高效的结构,它仍是我们设计程序时努力的一个方向。
链式结构中的双向链表也是在程序设计中应用频繁的数据结构,它可以表示为:
其中每个单元除了存放元素外,还有一个前趋和后继指针,这在一定程序上解决了单链表表示元素之间的关系过于简单的缺陷,但使用双链表时应当注意尽量控制向前查找的深度,因为此类问题输入数据中包含的元素十分庞大,处理不当会大大增加程序时间规模。因此双向链表也有一定的局限性,为了进一步把它的特点分析透彻,我们将在下文继续论述。
您可能关注的文档
最近下载
- Unit 8 Colours 第2课时 Story time(大单元教学设计)三年级英语下册(译林版三起2025).docx VIP
- 2023年深圳市高级中学新高一入学分班考试数学模拟试卷及答案解析.pdf VIP
- 天然气工业用户安全培训.pptx VIP
- 2023黑龙江哈尔滨“丁香人才周”(秋季) 事业单位引才招聘巴彦县教师招聘26人笔试备考试题及答案解析.docx VIP
- 交通事故民事起诉状[交通事故起诉状民事].docx VIP
- 交通事故民事起诉状怎么写.pdf VIP
- CJJ1-2008城镇道路工程施工与质量验收规范.docx VIP
- 10万立方储灌施工方案样本.doc VIP
- 天津大学金融专硕431历年真题(2013-2022)及答案解析.pdf VIP
- 公园升级改造工程施工组织设计方案.pdf VIP
文档评论(0)