使用数组对来合并有序列表的制作方法

文档序号:9510123阅读:358来源:国知局
使用数组对来合并有序列表的制作方法
【专利说明】使用数组对来合并有序列表
[0001]背景
[0002]列表是元素序列。有序列表是根据特定排序优先级(诸如字母顺序、递增值等)来排序的列表。有序列表保证对于每一对连续元素,先前元素满足相对于后续元素的特定排序优先级。例如,假设列表包括整数序列,并且排序优先级是递增值排序优先级。在这种情况下,如果对于序列中的每一对连续整数,后续整数等于或大于先前整数,则整数列表将根据递增值来排序。每一有序列表包括首元素,该首元素是排序优先级中的最高优先级,并由此是有序列表中的第一元素。每一有序列表还包括尾元素,该尾元素是排序优先级中的最低优先级,并由此是有序列表中的最后元素。
[0003]存在数十年前开发的用于将输入有序列表合并成根据与输入有序列表相同的排序优先级来排序的合并有序列表的特定方法(在此被称为“优先级排队方法”)。该优先级排队方法使用优先级队列来制定合并列表,并且涉及排序操作的多个阶段。在第一阶段中,来自所有输入有序列表的每一首元素被放置在优先级队列中,并由此优先级队列中的每一空间都对应于输入有序列表。在每一排序阶段中,通过将优先级队列内的最高优先级元素移至合并有序列表的末尾作为该合并有序列表的新尾元素来将合并有序列表扩展一个元素。来自输入有序列表的与通过该移动腾空的空间相对应的未经处理的最高优先级元素然后通过将该元素复制到被腾空空间中来处理,由此完成排序阶段。
[0004]概述
[0005]根据本文描述的至少一个实施例,使用数组对来分多个阶段从多个输入有序列表中制定合并有序列表。最初,用输入有序列表来连续填充第一数组。在第一阶段中,将第一和第二输入有序列表合并成第二数组中的第一中间合并列表。每一后续阶段合并从先前阶段产生的先前中间合并列表和第一数组中的下一输入有序列表,以生成下一中间合并列表或者最终合并有序列表(如果第一数组中不再有输入)。中间合并列表从一个阶段到下一阶段在第一数组和第二数组之间交替。
[0006]在一些实施例中,合并技术对于在顺序读取和写入操作方面是更高效的现代微处理器可以是特别高效的,因为合并可通过数组对在顺序操作中执行。该概述不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在被用来帮助确定所要求保护的主题的范围。
[0007]附图简述
[0008]为了描述能够获得上述和其它优点和特征的方式,各实施例的更具体的描述将通过参考各附图来呈现。可以理解,这些附图只描绘了示例实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释各实施例,在附图中:
[0009]图1抽象地示出其中可采用本文描述的一些实施例的计算系统;
[0010]图2示出根据本文描述的原理的用于制定合并有序列表的方法的流程图;
[0011]图3示出了用于处理图2的排序操作的每一排序阶段的方法的流程图;
[0012]图4A到4E示出了与一示例的第一排序阶段相关联的五个顺序排序状态操作,其中第一输入有序列表和第二输入有序列表被组合成第一中间合并有序列表;
[0013]图5A到5J示出了与该示例的第二排序阶段相关联的十个顺序排序状态操作,其中第一中间合并有序列表与第三输入有序列表合并以形成第二中间(并且可能是最终)合并有序列表;
[0014]图6示出了用于访问输入有序列表的方法的流程图;以及
[0015]图7示出了用于处理元素以形成有序列表的更一般化的方法的流程图。
[0016]详细描述
[0017]根据本文描述的实施例,描述了合并有序列表的制定。该制定使用多个输入有序列表并且使用数组对来分多个阶段进行。最初,用输入有序列表来连续填充第一数组。在第一阶段中,将第一和第二输入有序列表合并成第二数组中的第一中间合并列表。每一后续阶段合并从先前阶段产生的先前中间合并列表和第一数组中的下一输入有序列表,以生成下一中间合并列表或者合并有序列表(如果第一数组中不再有输入)。中间合并列表从一个阶段到下一阶段在第一数组和第二数组之间交替。
[0018]将参考图1来描述对计算系统的一些介绍性讨论。然后,将参考图2至7来描述有序列表合并的原理。
[0019]计算系统现在越来越多地采取多种多样的形式。例如,计算系统可以是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统或甚至常规上不被认为是计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括任何设备或系统(或其组合),该设备或系统包含至少一个物理有形的处理器以及其上能具有可由处理器执行的计算机可执行指令的物理有形的存储器。存储器可以采取任何形式,并可以取决于计算系统的性质和形式。计算系统可以分布在网络环境中,并可包括多个组分计算系统。
[0020]如图1所示,在其最基本的配置中,计算系统100包括至少一个处理单元102和计算机可读介质104。计算机可读介质104在概念上可被认为包括物理系统存储器,其可以是易失性的、非易失性的或这两者的某种组合。计算机可读介质104在概念上还包括非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。
[0021]如本文中所使用的,术语“可执行模块”或“可执行组件”可以指可以在计算系统上执行的软件对象、例程或方法。此处所描述的不同组件、模块、引擎以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在其中实施类型安全性并且其中各进程被分配了它们自己的不同存储器对象的受管环境中执行的情况下,这样的可执行模块可以是受管代码。在可执行模块用本机代码(如C或C++)编写的情况下,这样的可执行模块还可以是非受管代码。
[0022]在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令来引导计算系统的操作。例如,这样的计算机可执行指令可以在形成计算机程序产品的一个或多个计算机可读介质上实现。这样的操作的示例涉及对数据的操纵。计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可包含允许计算系统100例如通过网络110与其他处理器通信的通信信道108。
[0023]本文中描述的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的本文中描述的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:计算机存储介质和传输介质。
[0024]计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备,或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他有形存储介质。
[0025]“网络”被定义为使得电子数据能够在计算机系统和/或模块和/或其它电子设备之间传输的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可以包括可以用来携带所需要的以计算机可执行的指令或数据结构的形式存在的程序代码装置并可以被通用或专用计算机访问的网络和/或数据链路。上述的组合应当也被包括在计算机可读介质的范围内。
[0026]此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码资料可从传输介质自动传输到计算机存储介质(或反之亦然)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口控制器(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。因而,应当理解,计算机存储介质可被包括在还利用(或甚至主要利用)传输介质的计算机系统组件中。
[0027]计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
[0028]本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。
[0029]图2示出根据本文描述的原理的用于制定合并有序列表的方法200的流程图。方法200以及本文描述的任何其他方法可由诸如图1的计算系统100等计算系统来执行。具体而言,如果用软件实现,则处理器102执行存在于构成计算机程序产品的全部或部分的计算机可读介质(诸如计算机可读存储介质)上的计算机可执行指令。
[0030]对于输入,方法200使用各自根据排序优先级来排序的多个输入有序列表(动作201)。在此将使用特定示例来帮助理解本文描述的原理。在该特定示例中,存在三个输入有序列表,每一输入有序列表包括从最低到最高排序的整数元素。三个有序列表如下:
[0031]有序列表A:1,2,3,4,9
[0032]有序列表B:5,8
[0033]有序列表C:2,4,7
[0034]对于该示例,正确合并的有序列表将如下:
[0035]合并有序列表:1,2,2,3,4,4,5,7,8,9
[0036]在描述根据本文描述的原理的合并操作之前,首先将描述用于根据现有技术优先级队列方法来合并有序列表的机制。描述该第一机制的原因的一部分将是使得读者能清楚地看到与现有技术合并机制相比根据本文描述的原理的合并过程要复杂多少。有悖常理地,根据本文描述的原理的更复杂的合并过程与常规优先级队列方法相比实际上能由现代处理器更高效地执行。
[0037]在优先级队列方法的第一阶段中,其所具有元素的数量与所存在的输入有序列表的数量相同的优先级队列被首先建立并且用来自每一输入有序列表的首元素来填充。当来自输入有序列表的元素被填充到优先级队列中时,该元素从输入有序列表中移除。由此,在第一排序阶段开始时,操作状态如下:
[0038]有序列表A:2,3,4,9
[0039]有序列表B:8
[0040]有序列表C:4,7
[0041]优先级队列:1,5,2
[0042]由此,优先级队列中的第一元素用来自输入有序列表A的元素来填充,优先级队列中的第二元素用来自输入有序列表B的元素来填充,而优先级队列中的最后元素用来自输入有序列表C的元素来填充。
[0043]在每一排序阶段中,最高优先级元素被从优先级队列中移除并被放置
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1