基本数据结构在信息学竞赛中的应用.ppt

安徽省芜湖市第一中学 朱晨光 IOI2006国家集训队论文 基本数据结构在信息学竞赛中的应用 安徽省芜湖市第一中学 朱晨光 引言 题目难?应用高级数据结构 第一部分——基本数据结构的介绍 一、线性表(线性表的顺序存储结构) 线性表 二、线性表的链式存储结构 线性表的链式存储结构 线性表的链式存储结构 双向链表: 栈 队列 第二部分——基本数据结构的应用 线性表的应用——营业额统计 给定N(1≤N≤32767)天的营业额a1,a2,……,an. 定义一天的最小波动值等于 min{|该天以前某一天的营业额-该天营业额|} 特别地,第一天的最小波动值即为a1 试求N天的最小波动值之和 分析 这道题目的规模很大,如果简单地用两重循环解决,时间复杂度高达O(N2),难以满足要求。 分析 实际上,有一种高级数据结构——平衡树可以解决这个问题。我们可以在将一天的营业额插入平衡树的过程中得到该天的最小波动值。方法是求出所有在插入路径上的数字与改天营业额差的绝对值,从中取出最小值。这种算法的时间复杂度为O(Nlog2N). 进一步改进 应用基本数据结构——双向链表 将这N个元素进行排序,得到序列c,同时记录原来第i个元素在排序后的位置bi 双向链表 对于an,查看bn的前驱pre[bn]与后继next[bn]所指的数 最小波动值必然是an与这两个数中的某一个的差的绝对值 处

文档评论(0)

1亿VIP精品文档

相关文档