循环链表式滑动窗的设计与实现

作者:张剑; 刊名:电子世界 上传者:叶秋香

【摘要】由于数据流具有无限性及连续性,滑动窗口的应用可以有效的对数据流上的操作加以限制,但传统向量型滑动窗在连续数据的处理上计算开销大,效率低.本文提出一种循环链表式滑动窗口技术,以链表的形式存储每个子窗口所在位置,将新数据直接插入子窗口中,使滑动窗口在处理数据流时不必频繁移动窗内数据.实验结果证明,该方法能有效减少计算开销,增加数据处理效率.

全文阅读

武警工程大学信息工程系张剑0引言随着信息网络的发展,数据量不断加大,存储在数据库中的静态数据已不能满足研究与应用的需求,数据不再是静态的,而是一串实时,连续且有序的数据流,如电话数据、气温数据、病例数据、商业数据等等[1-3]。如今,如何对数据流进行高效处理已成为研究热点问题。常用数据流处理模型有滑动窗口模型、界标模型和快照模型。滑动窗模型是一种流量控制技术,可以良好的改善吞吐量,进行传输控制,目前被广泛的研究并应用于数据的处理当中[4-7]。目前大多滑动窗口的实现都基于向量模型[8],随着窗口的滑动,新数据移入且旧数据的移出,所有子窗口内的数据都要进行移动,这就造成了资源的浪费。循环链表[9]中,每一个子节点包含信息域和指针域,分别用来存储信息和指向下一节点。本文通过为滑动窗建立指针域,来减少窗口移动带来的因子窗口移动带来的数据处理量过大,效率低的问题。1基础知识1.1滑动窗口滑动窗口模型就是在数据流中设置一个窗口,可以通过滑动来维护处理当前数据。每处理一段数据,窗口向前滑动一个单位,对处理过的数据进行删除,并插入新的数据。如图1所示为含有4个基本窗口的滑动窗口。图1滑动窗口图2循环链表1.2循环链表链表中的每个结点包含一个指针域,每个结点除了存储自身元素外,还要存储一个指向后续结点的指针信息,最后一个结点的指针则指向链表的头结点,使整个链表形成一个环状链表,称作循环链表,可通过指针信息实现结点的插入与删除,结构如图2所示。2循环链表式滑动窗口2.1基本思想在基于向量模型的滑动窗口中,如果窗口未满,则顺序向前滑动。而当窗口被数据充满后,后续数据的到来会使得滑动窗口内的所有数据发生移动,但若是通过链表的方式,利用指针指向下一子目标窗口,把已处理数据直接删去,并向目标窗口直接插入新数据,而不是将窗口内的数据进行移动。2.2形式化表示循环链表式滑动窗口可以形式化的表示为:CircularlinkedlistW=link=head;i=1;将初始数据输入到窗口1;whlie(数据流输入){i=i+1;link=linkai;将数据输入到窗口i;}其中w表示滑动窗口的宽度;length表示当前子窗口内的数据量;head表示滑动窗口起始子窗口的位置;linkai表示每一子窗口的指针信息,用于指出下一子窗口的位置信息。2.3模型分析在滑动窗口未被填满时,循环链表式滑动窗口直接将数据根据链表指针填入空的子窗口中。当子窗口已满时,与传统向量模型不同的是,本文所提滑动窗口模型不会大幅度移动数据,而是根据指针直接将数据插入到下一子窗口并覆盖此处的数据,同时修改link值,指向末端数据。2.4效率分析在处理数据流时,滑动窗口在短时间内将会被填满,传统滑动窗口模型在子窗口被填满后会将窗口中数据依次移动,覆盖原有数据,并将新数据添加至最末端子窗口。本文所提循环链表式滑动窗口则是直接将新数据添加到最末端子窗口,无需大量移动原有数据。在对数据流的长期处理中,效率的提升是巨大的。3实验结果与分析本节将对循环链表式滑动窗口进行实验分析。实验数据来源于一台信号发生器,实验环境为:MicrosoftWindows7,500G硬盘,4G内存,使用C++实现滑动窗口的编译。实验1:主要通过将等量数据分别交给两种不同滑动窗口模型来考察滑动窗口对于数据流的响应能力,实验中未对窗口进行并发控制,实验结果如图1所示。由图3可知随着子窗口的变大,滑动时间均有减少,这是因为窗口的变大使单位时间内可滑过的数据量增加,由于循环链表在数据处理时不需要将数据频繁移动所以滑动时间更少。且随着窗口变大,指针信息

参考文献

引证文献

问答

我要提问