CN105843750A - 一种提升线性数据结构查询效率的方法 - Google Patents
一种提升线性数据结构查询效率的方法 Download PDFInfo
- Publication number
- CN105843750A CN105843750A CN201610164549.3A CN201610164549A CN105843750A CN 105843750 A CN105843750 A CN 105843750A CN 201610164549 A CN201610164549 A CN 201610164549A CN 105843750 A CN105843750 A CN 105843750A
- Authority
- CN
- China
- Prior art keywords
- rbtree
- data
- linear
- red
- data structure
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/0623—Address space extension for memory modules
Abstract
本发明是一种提升线性数据结构查询效率的方法,包括以下步骤,以线性存储的数据对象的ID作为红黑树节点的KEY,以该数据对象在存储介质中的地址作为红黑树节点的data域构造红黑树;在所述的红黑树中查询红黑树的KEY,查到相同的数据对象的ID对应的KEY时,到data所指向存储地址获得要查找的数据对象。这样将在线性存储元素中查询变换成在红黑树中查询大节省了查找的时间。
Description
技术领域
本发明涉及查询方法领域,特别涉及一种在共享内存中查询的方法,该方法中共享内存中的数据对象依次线性存储。
背景技术
在编程领域,有个概念,叫数组。在实现中,数组是一片地址连续的线性存储空间如图1所示:
这片空间被分成等额的若干等份,对于其中每一份,可以这么表示:
arr[i]
其中i为0~(n-1)
我们把arr[i]叫做这个数组的一个元素,i被称为下标。
而对于数组的查找,则是遍历数组的每一个元素然后进行比较,例如:
时间复杂度是n的函数:
f(n)=O(n)
如果有m个值要进行比较,如
则时间复杂度为:
f(n)=O(m*n)
可见,随着带查找个数(m)和数组长度(n)的增加,线性查找的时间复杂度急剧增加。
发明内容
本发明的目的在于:提供一种提升线性数据结构查询效率的方法。
本发明的技术方案:一种提升线性数据结构查询效率的方法,包括以下步骤,
步骤1,以线性存储的数据对象的ID作为红黑树的KEY,以该数据对象在存储介质中的地址作为红黑树的data域构造红黑树;
步骤2,在所述的红黑树中查询红黑树的KEY,查到相同的数据对象的ID对应的KEY时,到data所指向存储地址获得要查找的数据元素。
这样将在线性存储元素中查询变换成在红黑树中查询大节省了查找的时间。
进一步的,上述的提升线性数据结构查询效率的方法中:所述的数据对象线性存储在共享内存中。
进一步的,上述的提升线性数据结构查询效率的方法中:还包括构造一个专门用于构造红黑树的红黑树构造进程的步骤,所述的红黑树由红黑树构造进程构造。所述的红黑树生命周期与共享内存的生命周期相同。
进一步的,上述的提升线性数据结构查询效率的方法中::所述的红黑树由每个需要查询数据元素的进程构造。所述的红黑树生命周期与构造该红黑树的进程生命周期一致。
以下将结合附图和实施例,对本发明进行较为详细的说明。
附图说明
图1为线性存储示意图。
图2为实施例1中线性存储示意图。
图3为实施例1中红黑树示意图。
图4为本发明流程图。
具体实施方式
实施例1,本实施例是把在共享内存中的线性数组查找,通过将其转换成红黑树后查找的方法。
本实施例中,共享内存中保存有如下数组:
该共享内存中的数组包含1000个学生的信息的数组,如果某个进程需要对1000个学生进行查找,则所花的时间为1000*(1000/2)=500000个时间单位。
此时,这个进程或者构造一个专用的红黑树构造进程构造如下红黑树:
在上面定义的这个红黑树结构中,我们可以把学生编号作为红黑树的key,而把学生信息的数组元素地址作为红黑树的data域,从而构造一颗红黑树,从而实现由线性数组的查找转换成红黑树的查找。
在此,我假设红黑树的插入操作在时间上分布比较散,以至于时间成本可以忽略不计,因此,我们只考虑在已经构造好的红黑树上检索的时间成本,即在红黑树上检索的时间复杂度。
红黑树有以下性质:
●节点是红色或黑色
●根是黑色
●所有叶子都是黑色(叶子是NIL节点)
●每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
●从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点
以上性质,使得红黑树查找的时间复杂度最差为O(2 lg N),而平均时间复杂度为O(lg N).这个时间复杂度大大的小于线性数组查找的时间复杂度。
具体的通过下面结合附图进行的说明,本实施例的实现方法,特点和目的将会变得更加清楚。
其中,以5个同学为例说明线性数组到红黑树的转换。
5个同学的信息如表一所示:
表1
学生编号 | 学生姓名 | 学生性别 |
1007 | 张三 | 男 |
1002 | 李四 | 女 |
1008 | 王五 | 男 |
1009 | 赵六 | 男 |
1006 | 钱七 | 女 |
则在共享内存中的有线性数组如图2所示。
则那么,以学生编号为key,以学生在线性表中的元素起始地址为data(即定义中的student),转换后的红黑树如图3所示。
采用本实施例的效果如表2。
表2
可见,随着查找数量的增加,红黑树查找相对于线性查找的优势越明显,可以看到,当查找数量为10000时,线性查找所花的时间是红黑树查找的714倍,即,这个时候,红黑树的查找耗时是线性查找的1/714。
结论:用红黑树的查找,替换线性查找,可以大大的减少查找时间。
对本实施例来说,需要各个共享内存的进程在要进行查询时,生成红黑树保存在自己的私有内存中供自己使用。在实际应用过程中:如果已经生成有对应的红黑树了,那么该进程在查询时就不需要额外再生成红黑树。至于占用的内存什么时候释放则根据需要。
Claims (5)
1.一种提升线性数据结构查询效率的方法,其特征在于:包括以下步骤,
步骤1,以线性存储的数据对象的ID作为红黑树的KEY,以该数据对象在存储介质中的地址作为红黑树的data域构造红黑树;
步骤2,在所述的红黑树中查询红黑树的KEY,查到相同的数据对象的ID对应的KEY时,到data所指向存储地址获得要查找的数据对象。
2.根据权利要求1所述的提升线性数据结构查询效率的方法,其特征在于:所述的数据元素线性存储在各进程的共享内存中。
3.根据权利要求2所述的提升线性数据结构查询效率的方法,其特征在于:所述的红黑树生命周期与共享内存的生命周期相同。
4.根据权利要求3所述的提升线性数据结构查询效率的方法,其特征在于:所述的红黑树由每个需要查询数据对象的进程构造。
5.根据权利要求4所述的提升线性数据结构查询效率的方法,其特征在于:所述的红黑树生命周期与构造该红黑树的进程生命周期一致。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610164549.3A CN105843750A (zh) | 2016-03-22 | 2016-03-22 | 一种提升线性数据结构查询效率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610164549.3A CN105843750A (zh) | 2016-03-22 | 2016-03-22 | 一种提升线性数据结构查询效率的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105843750A true CN105843750A (zh) | 2016-08-10 |
Family
ID=56587788
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610164549.3A Pending CN105843750A (zh) | 2016-03-22 | 2016-03-22 | 一种提升线性数据结构查询效率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105843750A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106777163A (zh) * | 2016-12-20 | 2017-05-31 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及系统 |
CN108523874A (zh) * | 2018-02-26 | 2018-09-14 | 广东工业大学 | 基于红黑树的信号基线漂移校正方法、装置及存储介质 |
CN115794838A (zh) * | 2023-02-07 | 2023-03-14 | 深圳开源互联网安全技术有限公司 | 双向链表的存储方法、装置、终端设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
US20140181401A1 (en) * | 2011-09-02 | 2014-06-26 | Huawei Technologies Co., Ltd. | Method and apparatus for querying for and traversing virtual memory area |
CN104486387A (zh) * | 2014-12-02 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种数据同步处理方法及系统 |
CN105335245A (zh) * | 2014-07-31 | 2016-02-17 | 华为技术有限公司 | 故障存储方法和装置、故障查找方法和装置 |
-
2016
- 2016-03-22 CN CN201610164549.3A patent/CN105843750A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140181401A1 (en) * | 2011-09-02 | 2014-06-26 | Huawei Technologies Co., Ltd. | Method and apparatus for querying for and traversing virtual memory area |
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103823865A (zh) * | 2014-02-25 | 2014-05-28 | 南京航空航天大学 | 一种数据库主存索引方法 |
CN105335245A (zh) * | 2014-07-31 | 2016-02-17 | 华为技术有限公司 | 故障存储方法和装置、故障查找方法和装置 |
CN104486387A (zh) * | 2014-12-02 | 2015-04-01 | 浪潮(北京)电子信息产业有限公司 | 一种数据同步处理方法及系统 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106777163A (zh) * | 2016-12-20 | 2017-05-31 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及系统 |
CN106777163B (zh) * | 2016-12-20 | 2020-05-26 | 携程旅游网络技术(上海)有限公司 | 基于红黑树的ip地址所属地查询方法及系统 |
CN108523874A (zh) * | 2018-02-26 | 2018-09-14 | 广东工业大学 | 基于红黑树的信号基线漂移校正方法、装置及存储介质 |
CN115794838A (zh) * | 2023-02-07 | 2023-03-14 | 深圳开源互联网安全技术有限公司 | 双向链表的存储方法、装置、终端设备及存储介质 |
CN115794838B (zh) * | 2023-02-07 | 2023-05-26 | 深圳开源互联网安全技术有限公司 | 双向链表的存储方法、装置、终端设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108846133B (zh) | 基于b-m树的区块链存储结构、b-m树建立算法及查找算法 | |
Böttcher et al. | Universality for bounded degree spanning trees in randomly perturbed graphs | |
CN105630881B (zh) | 一种rdf的数据存储方法和查询方法 | |
Zheng et al. | Graph similarity search with edit distance constraint in large graph databases | |
CN106777163B (zh) | 基于红黑树的ip地址所属地查询方法及系统 | |
CN105843750A (zh) | 一种提升线性数据结构查询效率的方法 | |
CN103294822B (zh) | 一种基于主动哈希和布隆过滤器的高效缓存方法 | |
CN103116639A (zh) | 基于用户-物品二分图模型的物品推荐方法及系统 | |
CN105608214B (zh) | 对布控车牌号码进行快速搜索的方法 | |
CN102955843B (zh) | 一种键值数据库的多键查找实现方法 | |
CN103002061B (zh) | 一种长域名与短域名互相转化的方法及装置 | |
CN105515997B (zh) | 基于bf_tcam实现零范围扩张的高效范围匹配方法 | |
CN106503040B (zh) | 适用sql查询方法的kv数据库及其创建方法 | |
CN106202167B (zh) | 一种基于结构概要模型的有向标签图自适应索引构建方法 | |
WO2003030032A3 (en) | An index structure to access hierarchical data in a relational database system | |
CN103235789B (zh) | 一种汉字转换为拼音及首字母的方法 | |
CN102760165A (zh) | 一种使用位图索引的全文检索方法和装置 | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
CN106484684B (zh) | 一种对数据库中的数据进行术语匹配的方法 | |
CN100383787C (zh) | 一种数据库多表信息初始化方法 | |
CN116521956A (zh) | 一种图数据库查询方法、装置、电子设备及存储介质 | |
CN105095457B (zh) | 历史数据存储管理方法 | |
KR101743731B1 (ko) | 분산된 데이터를 통합하여 생성한 온톨로지를 기반으로 쿼리를 처리하는 방법 및 장치 | |
CN106649436A (zh) | 数据归档方法与装置 | |
CN110825747B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160810 |