CN104965686B - 一种优先级队列设计方法及优先级队列设计装置 - Google Patents
一种优先级队列设计方法及优先级队列设计装置 Download PDFInfo
- Publication number
- CN104965686B CN104965686B CN201510427912.1A CN201510427912A CN104965686B CN 104965686 B CN104965686 B CN 104965686B CN 201510427912 A CN201510427912 A CN 201510427912A CN 104965686 B CN104965686 B CN 104965686B
- Authority
- CN
- China
- Prior art keywords
- priority
- level
- query
- chained list
- column
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施例公开一种优先级队列设计方法及优先级队列设计装置。优先级队列设计方法包括:获取待置于优先级队列中的各元素的优先级级别序列;以得到的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;为构建的所述优先级队列中的列元素设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表;从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素。应用本发明,可以降低基于生成的优先级队列进行更新的时间复杂度。
Description
技术领域
本发明涉及计算机应用技术,尤其涉及一种优先级队列设计方法及优先级队列设计装置。
背景技术
在计算机应用领域中,队列是一种被经常应用的支持先进先出的数据结构,例如,被广泛应用于数据存储,优先级队列是在支持优先级级别的情况下,保持先进先出操作模式的队列,即对于需要处理的元素,按照优先级级别对各元素进行排序,对于优先级级别相同的元素,按照先进先出的方式进行排序,从而得到优先级队列。优先级队列一般适用于要求有序的应用场景中,实际应用中,在生成优先级队列后,由于元素的动态更新,因而,需要在优先级队列中不断执行插入元素、删除元素等优先级队列更新处理,为了保证优先级队列的有序,在优先级队列中插入新元素和删除队头元素时,需要结合待处理元素优先级级别以及先进先出重新调整优先级队列中已有元素的位置。
在对优先级队列进行更新的过程中,由于优先级队列中一个元素的变动可能导致需要对较多的元素进行优先级级别重排序处理,不仅需要消耗较多的计算资源,也使得基于生成的优先级队列进行更新所耗费的时间较长,此外,在对优先级队列整的元素进行查询时,其查询时间也与优先级队列的排序策略相关。因此,如何更有效地生成优先级队列,减少查询以及更新优先级队列中元素所需的时间,花费较小的代价,使得生成的优先级队列能快速高效地支持插入元素和删除元素等更新处理,提升用户的业务体验,是研究优先级队列的一个热点问题。
目前,对于C++标准模板库(STL,Standard Template Library)和Java中的优先级队列生成和更新,是基于堆来实现的。其中,堆是一种树形数据结构,是优先级队列中的一种,每个结点都有一个值,堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆在添加元素与删除元素时都会破坏堆结构,并只允许在优先级队列的前端(队头)进行删除操作,而在优先级队列的后端(队尾)进行插入操作。因而,添加元素与删除元素都需要进行堆结构调整,在堆结构调整中,需要按照优先级级别算法以及先进先出原则,将添加的元素插入优先级队列中该添加元素优先级对应的位置,在删除元素时,从第一个(即最小元素,优先级最高)元素开始,即取队头元素执行删除操作。这样,通过堆实现C++STL和Java中的优先级队列生成和更新,可以保证优先级队列中优先级高的先服务,而非先入先服务。但该基于优先级级别算法以及先进先出原则生成的优先级队列在进行更新时,插入元素和删除队头元素的时间复杂度都是O(logn),其中,n为优先级队列中元素的个数。
为了有效降低生成的优先级队列在进行更新时所需的时间,现有技术中提出了基于链表生成优先级队列,将各元素按照优先级级别递减顺序排列。这样,可以使得在生成的优先级队列中插入元素的时间复杂度为O(lgn),而将删除元素的时间复杂度降低为O(l)。但该方法,优先级队列整体更新所需的时间(时间复杂度)还是较长,降低了基于生成的优先级队列进行更新时的效率,不能满足用户即时、快速的业务处理需求。
发明内容
有鉴于此,本发明实施例提供一种优先级队列设计方法及优先级队列设计装置,降低基于生成的优先级队列进行更新的时间复杂度。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本发明实施例提供一种优先级队列设计方法,包括:
获取待置于优先级队列中的各元素的优先级级别序列;
以得到的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
为构建的所述优先级队列中的列元素设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表;
从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素。
本发明实施例提供的优先级队列设计方法,通过获取各元素对应的优先级级别,为每一级优先级级别设置对应的优先级级别索引,每一优先级级别索引映射一优先级级别链表,该优先级级别链表用于存储具有该优先级级别的所有元素。这样,在基于本发明实施例的优先级队列进行元素插入时,插入元素的时间复杂度降低为O(l);而当执行删除队头列元素的更新操作时,删除元素的时间复杂度为O(m),其中,m为优先级级别索引数,大大小于待置于优先级队列中的元素个数。从而在插入元素和获取队头列元素等更新操作时,均能大大减少时间复杂度,降低基于生成的优先级队列进行更新的时间复杂度,提升操作元素的效率。
另一方面,本发明实施例提供一种优先级队列设计装置,包括:优先级级别序列获取模块、优先级队列构建模块、优先级级别索引设置模块以及优先级级别链表生成模块,其中,
优先级级别序列获取模块,用于获取待置于优先级队列中的各元素的优先级级别序列;
优先级队列构建模块,用于以优先级级别序列获取模块获取的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
优先级级别索引设置模块,用于为优先级队列构建模块构建的所述优先级队列中的列元素对应的优先级级别设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表;
优先级级别链表生成模块,用于从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素。
本发明实施例提供的优先级队列设计装置,优先级级别序列获取模块通过获取各元素对应的优先级级别,优先级队列构建模块依据优先级级别序列构建优先级队列,优先级级别索引设置模块为每一级优先级级别设置对应的优先级级别索引,每一优先级级别索引映射一优先级级别链表,优先级级别链表生成模块为该优先级级别链表存储具有该优先级级别的所有元素。这样,在基于本发明实施例的优先级队列进行元素插入时,插入元素的时间复杂度降低为O(l);而当执行删除队头列元素的更新操作时,删除元素的时间复杂度为O(m),其中,m为优先级级别索引数,大大小于待置于优先级队列中的元素个数。从而在插入元素和获取队头列元素等更新操作时,均能大大减少时间复杂度,降低基于生成的优先级队列进行更新的时间复杂度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例优先级队列设计方法流程示意图;
图2为本发明实施例构建的优先级队列结构示意图;
图3为本发明实施例构建的另一优先级队列结构示意图;
图4本发明实施例的优先级队列设计装置结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例优先级队列设计方法流程示意图。参见图1,该方法包括:
步骤101,获取待置于优先级队列中的各元素的优先级级别序列;
本步骤中,对各待置于优先级队列中的元素进行优先级统计,其中,待置于优先级队列中的元素包括当前待置于优先级队列中的元素,以及后续应用中对优先级队列进行更新的元素。例如,如果待置于优先级队列中的元素数为1000,则对该1000个元素的优先级级别进行统计,假设经过统计,得到1000个元素包含的优先级级别为5、4、3、2、1、0,则获取的优先级级别序列可以为(5,4,3,2,1,0),也可以为(0,1,2,3,4,5)。
本发明实施例中,每一元素对应有一优先级级别,每一优先级级别对应一个或多个元素,关于为元素设置优先级级别的流程,由于与本发明实施例的实质内容无关,在此略去详述。
步骤102,以获取的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
本步骤中,按照优先级级别序列中的优先级级别个数构建优先级队列。例如,对于优先级级别序列(5,4,3,2,1,0),包含的优先级级别个数为6,即优先级级别分为六级,则构建的优先级队列中,包含6个列元素,分别为第一列元素~第六列元素,其中,优先级级别5对应优先级队列中的第一列元素,优先级级别4对应优先级队列中的第二列元素,...,优先级级别0对应优先级队列中的第六列元素。
当然,实际应用中,作为一可选实施例,考虑到后续元素优先级级别的扩展应用,该方法还可以进一步包括:
扩展构建的优先级队列。
本步骤中,考虑到后续对元素优先级级别的扩展,可能出现比优先级队列中的优先级级别更高的元素,因而,对于按照优先级级别由高至低的顺序构建的优先级队列,在优先级队列的队头,预留预定数量的空位,预定数量可以大于或等于出现的元素所包含的优先级级别数,用以按照优先级级别由高至低的顺序添加出现的元素对应的优先级级别;而对于按照优先级级别由低至高的顺序构建的优先级队列,在优先级队列的对尾,预留预定数量的空位,用以按照优先级级别由低至高的顺序添加出现的元素对应的优先级级别;如果出现位于优先级队列中两优先级级别之间的优先级别的元素,则在优先级队列的队中,预留预定数量的空位,以顺序添加出现的元素对应的优先级级别。
步骤103,为构建的所述优先级队列中的列元素设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表;
本步骤中,构建的优先级队列中,一个列元素对应一个级别的优先级级别,每一列元素设置有对应的一优先级级别索引,并将优先级级别索引指向一预先设置的空优先级级别链表。
如前所述,对于优先级队列包含有6个列元素的情形,为第一列元素对应的优先级级别5设置优先级级别索引5,并使优先级级别索引5映射(指向)优先级级别链表5,为第二列元素对应的优先级级别4设置优先级级别索引4,并使优先级级别索引4映射(指向)优先级级别链表4,...,为第六列元素对应的优先级级别0设置优先级级别索引0,并使优先级级别索引0映射(指向)优先级级别链表0。
作为一可选实施例中,优先级队列中的每一列元素对应设置有一优先级级别索引,每一优先级级别索引映射一优先级级别链表。
当然,实际应用中,对于待置于优先级队列中元素较多的情形,也可以为每一级别的优先级级别(列元素)设置多个优先级级别索引,这样,作为另一可选实施例,优先级队列中的每一列元素对应设置有多个优先级级别索引,每一优先级级别索引映射一优先级级别链表。
本发明实施例中,作为一可选实施例,优先级级别、优先级级别索引以及优先级级别链表可以采用相同的标识进行表征。作为另一可选实施例,优先级级别、优先级级别索引以及优先级级别链表中的两个或全部也可以采用不同的标识进行表征。
图2为本发明实施例构建的优先级队列结构示意图。参见图2,优先级队列包含三层结构,第一层结构为优先级级别,第二层结构为优先级级别索引,第三层结构为优先级级别链表,三层结构为一一对应关系。其中,优先级级别的标识为0至n的连续整数,当然,实际应用中,优先级级别的标识也可以为0至n的不连续整数,本发明实施例对此不做限定,优先级级别索引以及优先级级别链表的标识与优先级级别的标识相同。例如,优先级队列中依序包含有n个列元素,分别为优先级级别0、优先级级别1、优先级级别2、...、优先级级别n,其中,为优先级级别0设置优先级级别索引0,优先级级别索引0映射优先级级别链表0,优先级级别链表0包含有优先级级别为0的所有元素;为优先级级别1设置优先级级别索引1,优先级级别索引1映射优先级级别链表1,优先级级别链表1包含有优先级级别为1的所有元素;...、为优先级级别n设置优先级级别索引n,优先级级别索引n映射优先级级别链表n,优先级级别链表n包含有优先级级别为n的所有元素。
图3为本发明实施例构建的另一优先级队列结构示意图。参见图3,与图2不同的是,每一优先级级别(列元素)对应有一个或多个优先级级别索引,每一优先级级别索引映射一优先级级别链表,每一优先级级别链表包含有该优先级级别的部分元素。
步骤104,从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素。
本步骤中,每一优先级级别链表中包含有该优先级级别的元素,并按照先进先出的方式,对优先级级别链表中的元素进行排序。
作为一可选实施例,该方法还可以进一步包括:
步骤105,在构建的优先级队列中插入具备优先级级别的元素。
本步骤中,作为可选实施例,在构建的优先级队列中插入具备优先级级别的元素包括:
A11,获取该待插入元素的优先级级别;
本步骤中,每一待插入元素都携带有自身的优先级级别信息。
A12,查询优先级队列,若找到获取的优先级级别对应的列元素;
本步骤中,例如,如果待插入元素的优先级级别为2,则找到优先级队列中优先级级别2这个列元素。
A13,获取所述找到的列元素对应的优先级级别索引映射的优先级级别链表;
本步骤中,如图2所述,元素优先级级别2对应的优先级级别索引为优先级级别索引2,优先级级别索引映射的优先级级别链表为优先级级别链表2。
A14,将待插入元素插入获取的所述优先级级别链表的表尾。
本步骤中,由于优先级级别链表采用先进先出的数据结构,只允许在优先级级别链表的一端(队尾或表尾)插入元素,在另一端(队头)删除元素。因而,在需要插入元素时,将插入到优先级级别链表的表尾。
作为另一可选实施例,该方法还可以进一步包括:
获取该待插入元素的优先级级别;
查询优先级队列,若没有找到获取的优先级级别对应的列元素;
在优先级队列中,找到与获取的优先级级别前后相邻的两列元素;
在所述相邻的两列元素中插入新列元素,为所述新列元素分配相应的优先级级别索引,并使分配的所述优先级级别索引映射优先级级别链表;
将待插入元素插入所述优先级级别链表的表头。
作为再一可选实施例,该方法还可以进一步包括:
在构建的优先级队列中删除队头元素。
本步骤中,在构建的优先级队列中删除队头元素的更新操作包括:
遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素。
本步骤中,所述遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素具体包括:
A21,设置i=0;
A22,查询优先级队列中第i个列元素对应的优先级级别索引映射的优先级级别链表中的队头列元素是否为待删除队头元素,如果是,执行步骤A23,否则,执行步骤A24;
A23,提取优先级级别链表中的队头列元素并删除,结束更新流程;
A24,判断i是否为所述优先级队列中包含的列元素数,如果是,结束更新流程,如果否,i=i+1,返回执行步骤A22。
本发明实施例中,当删除队头列元素时,从优先级队列中第一个列元素对应的优先级级别索引(例如,优先级级别索引0)开始,查询该优先级级别索引映射的优先级级别链表(优先级级别链表0)中的队头列元素是否为待删除元素对应的队头列元素,如果是,取该优先级级别索引映射的优先级级别链表(优先级级别链表0)的队头列元素并删除;如果不是,查询优先级队列中第二个列元素对应的优先级级别索引映射的优先级级别链表(优先级级别链表1)中的队头列元素是否为待删除元素对应的队头列元素,如果是,取该优先级级别索引映射的优先级级别链表(优先级级别链表1)的队头列元素并删除,如果不是,则继续查找,直到优先级队列中第i个列元素对应的优先级级别索引映射的优先级级别链表(优先级级别链表i)中的队头列元素为待删除元素对应的队头列元素为止。
由上述可见,本发明实施例优先级队列设计方法,通过获取各元素对应的优先级级别,为每一级优先级级别设置对应的优先级级别索引,每一优先级级别索引映射一优先级级别链表,该优先级级别链表用于存储具有该优先级级别的所有元素。这样,可以保证具有相同优先级级别的元素在同一优先级级别链表中,并在优先级级别链表中,按照先进先出原则对元素进行排序。也就是说,在构建的优先级队列中,按照优先级级别高低对优先级级别进行列元素填充,每一优先级级别对应优先级队列中的一列元素,同一优先级级别的元素通过优先级级别索引映射的优先级级别链表来实现有序,优先级级别链表采用先进先出的方式对同一优先级级别的各元素进行排序。这样,基于本发明实施例的优先级队列进行元素插入以及元素删除等更新操作时,例如,在执行插入一个优先级级别为i的元素更新操作时,只需在优先级队列中找到对应的优先级级别索引i,将该元素直接插入到优先级级别索引i映射的优先级级别链表i的对尾(表尾),使得插入元素的时间复杂度降低为O(l)。而当执行删除队头列元素的更新操作时,从优先级队列中优先级级别索引0开始,查找优先级级别索引0映射的优先级级别链表0中的队头(表头)列元素,如果为待删除的队头列元素,则提取优先级级别链表0中的队头列元素并删除;如果未查找到,则查找优先级级别索引1映射的优先级级别链表1中的队头列元素,如果为待删除的队头列元素,则提取优先级级别链表1中的队头列元素并删除;如果未查找到,则继续查找,直到某一优先级级别索引i映射的优先级级别链表i包含了待删除队头列元素为止,删除元素的时间复杂度为O(m),其中,m为优先级级别索引数,即优先级级别序列中包含的优先级级别个数,大大小于待置于优先级队列中的元素个数。从而在插入元素和获取队头列元素等更新操作时,均能大大减少时间复杂度,降低基于生成的优先级队列进行更新的时间复杂度,提升操作元素的效率,进而提升用户的业务体验。
表1为本发明实施例基于生成的优先级队列进行更新操作的时间复杂度与基于现有技术中几种常见的优先级队列进行更新操作时的时间复杂度的效果对比示意表。
表1
优先级队列技术方案 | 数据结构 | 插入的时间复杂度 | 删除的时间复杂度 |
C++和Java | 堆 | O(logn) | O(logn) |
链表 | 链表 | O(n) | O(l) |
线性表 | 线性表 | O(n) | O(n) |
本发明实施例 | 索引+链表 | O(l) | O(m) |
表1中,n为待置于优先级队列中的元素个数,m为优先级级别序列中包含的优先级级别个数。从表1可知,由于每一级别的优先级级别包含有大量元素,使得优先级级别个数m可以远小于待置于优先级队列中的元素个数n,例如,对于待置于优先级队列中的元素个数为10万的情况下,其优先级级别个数m可能为10或更少;而且,随着待置于优先级队列中的元素个数的迅猛增加,其对应的优先级级别个数一般不会增加或增加的个数极少。因而,一般在优先级级别个数m远小于待置于优先级队列中的元素个数n的情况下,本发明实施例实现的优先级队列在插入新元素的时间复杂度降低为O(l),删除元素的时间复杂度为O(m),可以有效降低优先级队列整体更新的时间复杂度,大大提升了优先级队列操作元素的速度。
图4本发明实施例的优先级队列设计装置结构示意图。参见图4,该装置包括:优先级级别序列获取模块401、优先级队列构建模块402、优先级级别索引设置模块403以及优先级级别链表生成模块404,其中,
优先级级别序列获取模块401,用于获取待置于优先级队列中的各元素的优先级级别序列;
本发明实施例中,每一待置于优先级队列中的元素对应有一优先级级别,每一优先级级别对应一个或多个待置于优先级队列中的元素。
优先级队列构建模块402,用于以优先级级别序列获取模块401获取的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
本发明实施例中,作为一可选实施例,优先级队列中的列元素个数与优先级级别序列中的优先级级别个数可以相同,优先级队列中的每一列元素采用相应的优先级级别进行填充。
作为另一可选实施例,优先级队列中的列元素个数也可以大于优先级级别序列中的优先级级别个数。其中,采用优先级级别对优先级队列中的相应列元素进行填充,而优先级队列中未被填充的列元素作为优先级队列中的扩展(预留)列元素以满足后续优先级级别扩展的需要。例如,在所述优先级队列的队头或队尾或队中,预留预定数量的空位以扩展构建的所述优先级队列,用以添加与所述优先级队列未包含的优先级级别
优先级级别索引设置模块403,用于为优先级队列构建模块402构建的所述优先级队列中的列元素对应的优先级级别设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表;
本发明实施例中,构建的优先级队列中,一个列元素对应一个级别的优先级级别。
作为可选实施例,优先级队列中的每一列元素设置有对应的一优先级级别索引,并将优先级级别索引指向一预先设置的优先级级别链表。
作为另一可选实施例,优先级队列中的每一列元素也可以对应设置有多个优先级级别索引,每一设置的优先级级别索引映射一优先级级别链表。
本发明实施例中,作为一可选实施例,优先级级别、优先级级别索引以及优先级级别链表可以采用相同的标识进行表征。作为另一可选实施例,优先级级别、优先级级别索引以及优先级级别链表中的两个或全部也可以采用不同的标识进行表征。
优先级级别链表生成模块404,用于从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素。
本发明实施例中,在构建的优先级队列中,按照优先级级别高低对优先级级别进行列元素填充,每一优先级级别对应优先级队列中的一列元素,同一优先级级别的元素通过优先级级别索引映射的优先级级别链表来实现有序,优先级级别链表采用先进先出的方式对同一优先级级别的各元素进行排序。
作为一可选实施例,该装置还可以进一步包括:
元素插入更新模块405,用于在优先级队列构建模块402构建的优先级队列中插入具备优先级级别的元素。
本发明实施例中,元素插入更新模块405包括:优先级级别获取单元、查询单元、优先级级别链表获取单元以及插入单元(图中未示出),其中,
优先级级别获取单元,用于获取待插入元素的优先级级别;
查询单元,用于查询优先级队列,若找到获取的优先级级别对应的列元素;
优先级级别链表获取单元,用于获取所述找到的列元素对应的优先级级别索引映射的优先级级别链表;
插入单元,用于将待插入元素插入获取的所述优先级级别链表的表尾。
本发明实施例中,元素插入更新模块405还可以进一步用于:
获取该待插入元素的优先级级别;
查询优先级队列,若没有找到获取的优先级级别对应的列元素;
在优先级队列中,找到与获取的优先级级别前后相邻的两列元素;
在所述相邻的两列元素中插入新列元素,为所述新列元素分配相应的优先级级别索引,并使分配的所述优先级级别索引映射优先级级别链表;
将待插入元素插入所述优先级级别链表的表头。
作为另一可选实施例,该装置还可以进一步包括:
元素删除更新模块406,用于在优先级队列构建模块402构建的优先级队列中删除队头元素。
本发明实施例中,所述在构建的优先级队列中删除队头元素包括:
遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素。
作为可选实施例,元素删除更新模块406包括:遍历单元、查询处理单元以及提取单元(图中未示出),其中,
遍历单元,用于接收元素删除指令,定位优先级队列中第一个列元素对应的优先级级别索引,获取该优先级级别索引映射的优先级级别链表;接收查询处理单元的遍历指令,获取当前优先级级别索引的下一优先级级别索引映射的优先级级别链表;
查询处理单元,用于在遍历单元获取的优先级级别链表中,查询所述获取的优先级级别链表中的队头列元素是否是否为待删除元素,如果是,通知提取单元,如果否,向遍历单元发送遍历指令;
本发明实施例中,作为可选实施例,查询处理单元在确定否之后,向遍历单元发送遍历指令之前,进一步用于当前的列元素是否为所述优先级队列中遍历的最后一个列元素,如果是,结束更新流程,如果否,执行向遍历单元发送遍历指令的流程。
提取单元,用于提取查询处理单元查询的优先级级别链表中的队头列元素并删除。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种优先级队列设计方法,其特征在于,该方法包括:
获取待置于优先级队列中的各元素的优先级级别序列;
以得到的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
为构建的所述优先级队列中的列元素设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表,每一列元素映射一优先级级别链表;
从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素;
所述方法进一步包括:
在所述优先级队列的队头或队尾或队中,预留预定数量的空位以扩展构建的所述优先级队列,用以添加与所述优先级队列未包含的优先级级别;
在构建的优先级队列中删除队头元素;
所述在构建的优先级队列中删除队头元素包括:
遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素;
所述遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素具体包括:
A21,设置i=0;
A22,查询优先级队列中第i个列元素对应的优先级级别索引映射的优先级级别链表中的队头列元素是否为待删除队头元素,如果是,执行步骤A23,否则,执行步骤A24;
A23,提取优先级级别链表中的队头列元素并删除,结束更新流程;
A24,判断i是否为所述优先级队列中包含的列元素数,如果是,结束更新流程,如果否,i=i+1,返回执行步骤A22。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
在构建的优先级队列中插入具备优先级级别的元素。
3.根据权利要求2所述的方法,其特征在于,所述在构建的优先级队列中插入具备优先级级别的元素包括:
获取该待插入元素的优先级级别;
查询优先级队列,若找到获取的优先级级别对应的列元素;
获取所述找到的列元素对应的优先级级别索引映射的优先级级别链表;
将待插入元素插入获取的所述优先级级别链表的表尾。
4.根据权利要求3所述的方法,其特征在于,还包括:
获取该待插入元素的优先级级别;
查询优先级队列,若没有找到获取的优先级级别对应的列元素;
在优先级队列中,找到与获取的优先级级别前后相邻的两列元素;
在所述相邻的两列元素中插入新列元素,为所述新列元素分配相应的优先级级别索引,并使分配的所述优先级级别索引映射优先级级别链表;
将待插入元素插入所述优先级级别链表的表头。
5.根据权利要求2所述的方法,其特征在于,所述待置于优先级队列中的每一元素对应有一优先级级别,每一优先级级别对应一个或多个所述待置于优先级队列中的元素,所述优先级队列中的每一列元素对应设置有一个或多个优先级级别索引,每一所述优先级级别索引映射一优先级级别链表。
6.一种优先级队列设计装置,其特征在于,该装置包括:优先级级别序列获取模块、优先级队列构建模块、优先级级别索引设置模块以及优先级级别链表生成模块,其中,
优先级级别序列获取模块,用于获取待置于优先级队列中的各元素的优先级级别序列;
优先级队列构建模块,用于以优先级级别序列获取模块获取的优先级级别序列构建优先级队列,优先级级别序列中的每一级优先级级别对应构建的所述优先级队列中的一列元素;
优先级级别索引设置模块,用于为优先级队列构建模块构建的所述优先级队列中的列元素对应的优先级级别设置相应的优先级级别索引,并使设置的所述优先级级别索引映射优先级级别链表,每一列元素映射一优先级级别链表;
优先级级别链表生成模块,用于从所述待置于优先级队列中的各元素中,选取相同优先级级别的元素,按照先进先出的方式,置于该优先级级别对应的优先级级别链表中,以使所述优先级级别链表存储具有该优先级级别的所有元素;
所述优先级队列构建模块进一步用于在所述优先级队列的队头或队尾或队中,预留预定数量的空位以扩展构建的所述优先级队列,用以添加与所述优先级队列未包含的优先级级别;
所述装置进一步包括:
元素删除更新模块,用于在构建的优先级队列中删除队头元素;
所述在构建的优先级队列中删除队头元素包括:
遍历优先级级别索引,若所述优先级级别索引对应的优先级级别链表的头元素与所述队头元素相同,则删除所述头元素;
所述元素删除更新模块包括:遍历单元、查询处理单元以及提取单元,其中,
遍历单元,用于接收元素删除指令,定位优先级队列中第一个列元素对应的优先级级别索引,获取该优先级级别索引映射的优先级级别链表;接收查询处理单元的遍历指令,获取当前优先级级别索引的下一优先级级别索引映射的优先级级别链表;
查询处理单元,用于在遍历单元获取的优先级级别链表中,查询所述获取的优先级级别链表中的队头列元素是否为待删除元素,如果是,通知提取单元,如果否,向遍历单元发送遍历指令;
提取单元,用于提取查询处理单元查询的优先级级别链表中的队头列元素并删除。
7.根据权利要求6所述的装置,其特征在于,所述装置进一步包括:
元素插入更新模块,用于在构建的优先级队列中插入具备优先级级别的元素。
8.根据权利要求7所述的装置,其特征在于,所述元素插入更新模块包括:优先级级别获取单元、查询单元、优先级级别链表获取单元以及插入单元,其中,
优先级级别获取单元,用于获取待插入元素的优先级级别;
查询单元,用于查询优先级队列,若找到获取的优先级级别对应的列元素;
优先级级别链表获取单元,用于获取所述找到的列元素对应的优先级级别索引映射的优先级级别链表;
插入单元,用于将待插入元素插入获取的所述优先级级别链表的表尾。
9.根据权利要求8所述的装置,其特征在于,所述元素插入更新模块还用于获取该待插入元素的优先级级别;
查询优先级队列,若没有找到获取的优先级级别对应的列元素;
在优先级队列中,找到与获取的优先级级别前后相邻的两列元素;
在所述相邻的两列元素中插入新列元素,为所述新列元素分配相应的优先级级别索引,并使分配的所述优先级级别索引映射优先级级别链表;
将待插入元素插入所述优先级级别链表的表头。
10.根据权利要求7所述的装置,其特征在于,所述待置于优先级队列中的每一元素对应有一优先级级别,每一优先级级别对应一个或多个所述待置于优先级队列中的元素,所述优先级队列中的每一列元素对应设置有一个或多个优先级级别索引,每一所述优先级级别索引映射一优先级级别链表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510427912.1A CN104965686B (zh) | 2015-07-20 | 2015-07-20 | 一种优先级队列设计方法及优先级队列设计装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510427912.1A CN104965686B (zh) | 2015-07-20 | 2015-07-20 | 一种优先级队列设计方法及优先级队列设计装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104965686A CN104965686A (zh) | 2015-10-07 |
CN104965686B true CN104965686B (zh) | 2019-01-22 |
Family
ID=54219722
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510427912.1A Active CN104965686B (zh) | 2015-07-20 | 2015-07-20 | 一种优先级队列设计方法及优先级队列设计装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104965686B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107193761B (zh) * | 2016-03-15 | 2021-07-27 | 厦门旌存半导体技术有限公司 | 队列优先级仲裁的方法与装置 |
CN106327105A (zh) * | 2016-09-07 | 2017-01-11 | 东信和平科技股份有限公司 | 一种订单优先级别数据处理方法及系统 |
CN107317769A (zh) * | 2017-05-25 | 2017-11-03 | 北京空间飞行器总体设计部 | 一种基于有序优先级队列的源包调度方法 |
CN107943854B (zh) * | 2017-11-03 | 2022-01-11 | 深圳前海微众银行股份有限公司 | 征信业务查询方法、装置及计算机可读存储介质 |
CN111277900B (zh) * | 2018-12-05 | 2022-12-23 | 深圳市茁壮网络股份有限公司 | 一种机顶盒的启动方法和装置 |
CN110673937B (zh) * | 2019-09-19 | 2022-11-15 | 惠州志顺电子实业有限公司 | 单片机及其同步异步控制方法 |
CN111124355B (zh) * | 2019-12-12 | 2023-04-07 | 东软集团股份有限公司 | 信息处理方法、装置、可读存储介质及电子设备 |
CN112861091A (zh) * | 2021-03-18 | 2021-05-28 | 网易(杭州)网络有限公司 | 登录方法、装置、电子设备和存储介质 |
CN115934384B (zh) * | 2023-01-16 | 2023-06-09 | 云账户技术(天津)有限公司 | 消息队列的实现方法、系统、电子设备和可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101902487A (zh) * | 2009-05-26 | 2010-12-01 | 中兴通讯股份有限公司 | 基于链表的队列调度方法与装置 |
CN102843298A (zh) * | 2012-09-12 | 2012-12-26 | 盛科网络(苏州)有限公司 | 实现交换机芯片Openflow流表优先级的方法及系统 |
CN104753788A (zh) * | 2013-12-25 | 2015-07-01 | 深圳市中兴微电子技术有限公司 | 一种基于索引分配的数据转发方法及装置 |
-
2015
- 2015-07-20 CN CN201510427912.1A patent/CN104965686B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101902487A (zh) * | 2009-05-26 | 2010-12-01 | 中兴通讯股份有限公司 | 基于链表的队列调度方法与装置 |
CN102843298A (zh) * | 2012-09-12 | 2012-12-26 | 盛科网络(苏州)有限公司 | 实现交换机芯片Openflow流表优先级的方法及系统 |
CN104753788A (zh) * | 2013-12-25 | 2015-07-01 | 深圳市中兴微电子技术有限公司 | 一种基于索引分配的数据转发方法及装置 |
Non-Patent Citations (2)
Title |
---|
"Quality-guided phase unwrapping technique: comparison of quality maps and guiding strategies";Ming Zhao等;《Applied Optics》;20111120;第50卷(第33期);第6214-6224页 |
"利用量化质量图和优先队列的快速相位解缠算法";钟何平等;《武汉大学学报·信息科学版》;20110331;第36卷(第3期);第342-345页 |
Also Published As
Publication number | Publication date |
---|---|
CN104965686A (zh) | 2015-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104965686B (zh) | 一种优先级队列设计方法及优先级队列设计装置 | |
KR101994021B1 (ko) | 파일 조작 방법 및 장치 | |
CN108038002B (zh) | 一种嵌入式软件内存管理方法 | |
CN109690498B (zh) | 内存管理方法和设备 | |
KR20130020050A (ko) | 로컬리티 센서티브 해시의 버킷 구간 관리 장치 및 그 방법 | |
CN104794177B (zh) | 一种数据存储方法及装置 | |
CN103324763B (zh) | 一种手机端树形数据结构的展现方法 | |
CN105515864A (zh) | 容器资源自适应调整方法及系统 | |
CN105550371A (zh) | 一种面向大数据环境的元数据组织方法和系统 | |
US10114866B2 (en) | Memory-constrained aggregation using intra-operator pipelining | |
CN102915382A (zh) | 一种基于索引的数据库的数据查询方法和装置 | |
CN103678408A (zh) | 一种查询数据的方法及装置 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN104750432B (zh) | 一种数据存储方法及装置 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN104572809A (zh) | 一种分布式关系数据库自由扩展方法 | |
CN104572505A (zh) | 一种保证海量数据缓存最终一致性的系统及方法 | |
CN104956340B (zh) | 可扩展数据重复删除 | |
CN108920105B (zh) | 基于社区结构的图数据分布式存储方法及装置 | |
CN103425435A (zh) | 磁盘存储方法及磁盘存储系统 | |
CN102404411A (zh) | 云存储系统的数据同步方法 | |
US10216627B1 (en) | Tree structure serialization and deserialization systems and methods | |
CN103049561B (zh) | 一种数据压缩方法、存储引擎及存储系统 | |
CN106156049A (zh) | 一种数据读取的方法和系统 | |
CN101783814A (zh) | 海量存储系统的元数据存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |