CN114625933A - 内存中字符串查找方法、装置、设备、存储介质及产品 - Google Patents
内存中字符串查找方法、装置、设备、存储介质及产品 Download PDFInfo
- Publication number
- CN114625933A CN114625933A CN202210303785.4A CN202210303785A CN114625933A CN 114625933 A CN114625933 A CN 114625933A CN 202210303785 A CN202210303785 A CN 202210303785A CN 114625933 A CN114625933 A CN 114625933A
- Authority
- CN
- China
- Prior art keywords
- character string
- memory
- stored
- resident character
- resident
- 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
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 33
- 238000010845 search algorithm Methods 0.000 claims abstract description 25
- 230000006870 function Effects 0.000 claims description 100
- 238000013507 mapping Methods 0.000 claims description 22
- 238000012163 sequencing technique Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000011161 development Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000006855 networking Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- PCTMTFRHKVHKIS-BMFZQQSSSA-N (1s,3r,4e,6e,8e,10e,12e,14e,16e,18s,19r,20r,21s,25r,27r,30r,31r,33s,35r,37s,38r)-3-[(2r,3s,4s,5s,6r)-4-amino-3,5-dihydroxy-6-methyloxan-2-yl]oxy-19,25,27,30,31,33,35,37-octahydroxy-18,20,21-trimethyl-23-oxo-22,39-dioxabicyclo[33.3.1]nonatriaconta-4,6,8,10 Chemical compound C1C=C2C[C@@H](OS(O)(=O)=O)CC[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@H]([C@H](C)CCCC(C)C)[C@@]1(C)CC2.O[C@H]1[C@@H](N)[C@H](O)[C@@H](C)O[C@H]1O[C@H]1/C=C/C=C/C=C/C=C/C=C/C=C/C=C/[C@H](C)[C@@H](O)[C@@H](C)[C@H](C)OC(=O)C[C@H](O)C[C@H](O)CC[C@@H](O)[C@H](O)C[C@H](O)C[C@](O)(C[C@H](O)[C@H]2C(O)=O)O[C@H]2C1 PCTMTFRHKVHKIS-BMFZQQSSSA-N 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013515 script Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9017—Indexing; Data structures therefor; Storage structures using directory or table look-up
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种内存中字符串查找方法、装置、设备、存储介质及产品。该方法包括:获取待查找的目标内存驻留字符串;确定当前满足的字符串查找条件;若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。采用二分查找算法或根据哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串,可以降低算法时间复杂度、提高查找效率,并控制已存储的驻留字符串占用的内存。
Description
技术领域
本申请涉及计算机技术,尤其涉及一种内存中字符串查找方法、装置、设备、存储介质及产品。
背景技术
Python编程语言由于具有高级数据结构,简单有效地面向对象编程的特点,所以被广泛使用。Micropython是Python3编程语言的一个完整软件实现。其用C语言编写,被优化与运行在微控制器之上。提供给用户一个交互式解释器(简称:REPL)来立即执行所支持的命令。
其中,在采用Micropython执行所支持的命令来实现设备的某项功能时,需要在设备内存中存储该项功能对应函数与底层C语言实现该项功能对应函数的映射关系。其中实现某项功能的函数可采用字符串表示,为了查找实现某项功能的映射关系是否存在时,可以查找该项功能的字符串是否存在的方式进行。
目前在内存中查找实现该项功能对应的字符串是否存在时,一般采用字符串遍历查找的方式进行。导致查找字符串的时间复杂度较高,进而导致查找的效率较低,执行命令实现该项功能的效率较低。
发明内容
本申请提供一种内存中字符串查找方法、装置、设备、存储介质及产品,用以解决采用字符串遍历查找的方式查找字符串是否存在时,查找字符串的时间复杂度较高,进而导致查找的效率较低,执行命令实现该项功能的效率较低的问题。
第一方面,本申请提供一种内存中字符串查找方法,包括:
获取待查找的目标内存驻留字符串,所述目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;
确定当前满足的字符串查找条件;
若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;
若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
第二方面,本申请提供一种内存中字符串查找装置,包括:
获取模块,用于获取待查找的目标内存驻留字符串,所述目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;
确定模块,用于确定当前满足的字符串查找条件;
查找模块,用于若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
第三方面,本申请提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现上述任意一个方面所述的内存中字符串查找方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述任意一个方面所述的字符串查找方法。
第五方面,本申请提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任意一个方面所述的字符串查找方法。
本申请提供的内存中字符串查找方法、装置、设备、存储介质及产品,获取待查找的目标内存驻留字符串,所述目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;确定当前满足的字符串查找条件;若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。根据当前满足的字符串查找条件确定采用二分查找算法还是根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串后,由于采用二分查找算法或根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串,均可以降低算法时间复杂度,提高查找效率,进一步地,可以提高执行命令实现目标功能的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的应用场景示意图;
图2为本申请实施例一提供的内存中字符串查找方法流程图;
图3为本申请实施例二提供的内存中字符串查找方法流程图;
图4为本申请实施例三提供的内存中字符串查找方法流程图;
图5为本申请实施例四提供的内存中字符串查找方法流程图;
图6为本申请实施例六提供的内存中字符串查找方法流程图;
图7为本申请实施例七提供的内存中字符串查找方法流程图;
图8为本申请实施例八提供的内存中字符串查找装置结构示意图;
图9为本申请实施例九提供的电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
首先对本申请所涉及的名词进行解释:
MicroPython是用于嵌入式系统上的Python。Python是一种脚本语言,是一种面向对象的解释型计算机程序设计语言,语法简洁、使用简单、功能强大、容易扩展,但是Python不能实现对一些底层的操作。MicroPython把C语言封装起来,让用户可以用Python的语法去调用C语言,让开发人员可以通过编写Python脚本控制硬件底层,给开发人员提供了便捷的嵌入式硬件操作库,极大的降低了嵌入式开发的门槛。
QSTR是uniQue STRing的简称,是一种字符串内存驻留方法。一个字符串可能在命令中出现多次,MicroPython在处理命令时,针对命令中出现多次的字符串只在内存中存储一份字符串主体,在使用字符串时,去内存中寻找对应的字符串,此过程被称为字符串驻留QSTR。
在现有技术中,已存储的驻留字符串按存储顺序排序形成线性数组,由于按存储顺序排序形成线性数组中的字符串无规律,只能采用线性遍历查找的方式在已存储的驻留字符串中查找目标内存驻留字符串,而线性遍历查找的方式的算法时间复杂度为O(n),算法时间复杂度较高,导致查找的效率较低。发明人在研究中发现,对已存储的驻留字符串按预设排布顺序进行排序,就可以使用二分查找算法查找目标内存驻留字符串,二分查找算法的算法时间复杂度大于O(logN),小于O(n),因此可以降低算法时间复杂度;进一步地,由于哈希表与红黑树的组合查找方式,算法时间复杂度最大为O(logN),算法时间复杂度随着哈希表的增大指数递减,复杂度为O(logN)/logK,其中,N为已存储的驻留字符串的数量,K为哈希表大小,将已存储的驻留字符串的按哈希表与红黑树组合的方式存储,并采用哈希表与红黑树的组合查找方式查找目标内存驻留字符串,可以进一步的降低算法时间复杂度,提高查找效率,并提高执行命令实现目标功能的效率。所以本申请中判断当前满足的字符串查找条件,若满足线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中,若满足结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。均可有效降低算法时间复杂度,提高查找效率,进而提高执行命令实现目标功能的效率。
本申请提供的数据传输的方法,旨在解决现有技术的如上技术问题。
图1为本申请实施例提供的应用场景示意图,如图1所示,本申请的应用场景中包括:云端服务器集群1、电子设备2,其中,电子设备2可以为具有物联网开发板的物联网设备,云物联网平台在云端服务器集群1中。电子设备2中的物联网开发板可以提供各种丰富的硬件操作接口,可以将MicroPython应用在物联网开发板中,以通过烧录入物联网开发板中的Python编写的命令,实现Python编写的命令对应的目标功能,从而可以轻松便捷的搭建各种功能丰富应用,并让物联网应用轻松实现跨平台更新。例如,可以通过connect命令,实现使电子设备2连接云端服务器集群1中云物联网平台的功能;还可以通过register命令,实现使电子设备2在云端1中云物联网平台注册的功能。还可以通过其他智能操作命令,实现电子设备2与云物联网平台交互中的各种人工智能的能力。
具体地,用户可通过操作界面并采用Python编程语言编写执行目标功能对应函数的命令,如图1所示,如该命令为:ABC.connect(‘abc’),采用本申请实施例提供的内存中字符串查找方法在内存中查找到目标内存驻留字符串后,确定出目标内存驻留字符串确定与其具有映射关系的底层编码字符串;按照底层编码字符串对应的函数代码执行目标功能。如图1所示,执行连接服务器集群1中云物联网平台的功能,则执行该功能后,向云端服务器集群1中云物联网平台发送连接请求,云物联网平台根据连接请求,建立与电子设备之间的连接。
可以理解的是,本申请实施例提供的内存中字符串查找方法还可以应用在其他应用场景中,本申请对此不作限定。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
实施例一
图2为本申请实施例一提供的内存中字符串查找方法流程图,本申请实施例针对采用字符串遍历查找的方式查找字符串是否存在时,查找字符串的时间复杂度较高,进而导致查找的效率较低,执行命令实现该项功能的效率较低的问题,提供了内存中字符串查找方法。本实施例中的方法应用于内存中字符串查找装置,内存中字符串查找装置可以为各种形式的微控制器硬件。诸如,单片机、电子电路板、嵌入式电子版、物联网芯片、开发板等。各种形式的微控制器硬件可以位于电子设备中。电子设备可以为具有微控制器硬件的设备,诸如,膝上型计算机、台式计算机、工作台、服务器、刀片式服务器、云服务器、大型计算机、物联网设备等。
如图2所示,该方法具体步骤如下:
步骤S101、获取待查找的目标内存驻留字符串。
其中,目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写。
具体地,获取待运行代码,确定待运行代码中的实现设备的目标功能对应函数的函数名,将目标功能对应函数的函数名确定为待查找的目标内存驻留字符串。
其中,待运行代码为执行目标功能对应函数的命令代码。
本申请实施例中,对获取待运行代码的方式不做具体限定,示例性地,用户可以使用REPL使电子设备获取待运行代码,电子设备也可以通过读取导入的文件获取待运行代码。
示例性地,获取的待运行代码为ABC.connect(‘abc’),其中,“ABC”为具有目标功能的模块标识。“abc”为函数名为connect的函数中的输入参数。确定待运行代码中的函数名为connect,将connect确定为待查找的目标内存驻留字符串。
步骤S102、确定当前满足的字符串查找条件。
本申请实施例中,字符串查找条件包括线性查找条件及结合查找条件。其中,线性查找条件为采用线性查找的方式进行查找的条件。结合查找条件为将哈希表与哈希表中哈希值索引对应的数据结构相结合查找的条件。
其中,线性查找条件及结合查找条件可以预先设置,本申请实施例对预先设置的线性查找条件及结合查找条件不做具体限定,例如,可以根据待查找的目标内存驻留字符串的数目预先设置,也可以根据电子设备的内存大小预先设置。示例性地,根据待查找的目标内存驻留字符串的数目预先设置字符串查找条件,线性查找条件可以为:目标内存驻留字符串的数目小于2000个,结合查找条件可以为:目标内存驻留字符串的数目大于等于2000个。
本申请实施例对确定当前满足的字符串查找条件的方式不做具体限定,示例性地,若预先设置的线性查找条件为内存大小小于256千字节,结合查找条件为内存大小大于或等于256千字节;则可以通过判断电子设备的内存大小是否小于256千字节,确定当前满足的字符串查找条件;若确定电子设备的内存大小小于256千字节,则确定当前满足的字符串查找条件为线性查找条件;若确定电子设备的内存大小不小于256千字节,则确定当前满足的字符串查找条件为结合查找条件。
本申请实施例中,若确定当前满足的字符串查找条件为线性查找条件,则执行步骤S103;若确定当前满足的字符串查找条件为结合查找条件,则执行步骤S104。
步骤S103、若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,若确定当前满足的字符串查找条件为线性查找条件,则已存储的驻留字符串按预设顺序存储于内存中。
具体地,在采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中时,将预设顺序存储于内存中的已存储的驻留字符串分为两个搜索区间;分别在两个搜索区间中查找目标内存驻留字符串,确定存在目标内存驻留字符串的搜索区间为待搜索区间,将待搜索区间中的已存储的驻留字符串再分为两个搜索区间,并分别在两个搜索区间中查找目标内存驻留字符串,直至待搜索区间中仅存在与目标内存驻留字符串相同的已存储的驻留字符串,或待搜索区间为空为止。若待搜索区间中仅存在与目标内存驻留字符串相同的已存储的驻留字符串,则确定目标内存驻留字符串存在于内存的已存储的驻留字符串中;若待搜索区间为空,则确定目标内存驻留字符串不存在于内存的已存储的驻留字符串中。
步骤S104、若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,若确定当前满足的字符串查找条件为结合查找条件,则已存储的驻留字符串按哈希值索引对应的数据结构存储于内存中。
其中,哈希值索引对应的数据结构可以为:一维数组,红黑树。哈希值索引对应的数据结构还可以为链表、二叉树等,本申请实施例对此不做具体限定。
示例性地,根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串的方式可以为:计算目标内存驻留字符串的哈希值,根据目标内存驻留字符串的哈希值确定目标内存驻留字符串在哈希表中的哈希值索引,若哈希值索引对应的数据结构为一维数组,则可以采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若哈希值索引对应的数据结构为红黑树,则根据哈希值索引对应的红黑树查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,可以根据预设哈希函数计算目标内存驻留字符串的哈希值,本申请实施例对预设的哈希函数不做具体限定。
本申请实施例中,若在哈希表或在红黑树中查找到目标内存驻留字符串,则确定目标内存驻留字符串存在于内存的已存储的驻留字符串中;若在哈希表未查找到目标内存驻留字符串,且在红黑树中未查找到目标内存驻留字符串,则确定目标内存驻留字符串不存在于内存的已存储的驻留字符串中。
本申请实施例中,获取待查找的目标内存驻留字符串,目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;确定当前满足的字符串查找条件;若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。根据当前满足的字符串查找条件确定采用二分查找算法还是根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串后,由于采用二分查找算法或根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串,均可以降低算法时间复杂度,提高查找效率,进一步地,可以提高执行命令实现目标功能的效率。
可选地,本申请实施例中,若确定目标内存驻留字符串存在于内存中,则根据查找到的目标内存驻留字符串确定与其具有映射关系的底层编码字符串;按照底层编码字符串对应的函数代码执行目标功能。
其中,底层编码字符串为电子设备可以直接执行的函数代码,例如底层编码字符串可以为由C语言编写的函数代码。
示例性地,目标内存驻留字符串为connect,对应的底层编码字符串为native_aiot_create_device,存储的目标内存驻留字符串与底层编码字符串的映射关系可以为:{MP_OBJ_NEW_QSTR(MP_QSTR_connect),MP_ROM_PTR(&native_aiot_create_device)},若确定目标内存驻留字符串connect存在于内存中,则可以确定对应的映射关系,将映射关系中字符串native_aiot_create_device确定为与其具有映射关系的底层编码字符串,可以按照native_aiot_create_device执行connect对应的目标功能。
本申请实施例中,内存中存储有目标内存驻留字符串与底层编码字符串的映射关系,若查找目标内存驻留字符串则可以基于目标内存驻留字符串与底层编码字符串的映射关系确定与目标内存驻留字符串具有映射关系的底层编码字符串,使电子设备可以按照底层编码字符串对应的函数代码执行目标功能。
可选地,本申请实施例中,若确定目标内存驻留字符串不存在于内存的已存储的驻留字符串,则将目标内存驻留字符串与对应底层编码字符串的映射关系加载至内存中,以使内存中存在目标内存驻留字符串,并可以确定与其具有映射关系的底层编码字符串,可以按照底层编码字符串对应的函数代码执行目标功能。
实施例二
图3为本申请实施例二提供的内存中字符串查找方法流程图,在上述实施例的基础上,本实施例涉及的是步骤S102确定当前满足的字符串查找条件的具体实现方式的细化,如图3所示,具体包括以下步骤:
步骤S201、确定内存资源大小。
其中,内存资源大小可以为微控制器硬件的内部存储器的空间大小。
本申请实施例中,预先存储的线性查找条件为内存资源大小小于或等于预设内存资源阈值;预先存储的结合查找条件为内存资源大于预设内存资源阈值。
具体地,获取线性查找条件及结合查找条件中的预设内存资源阈值,确定内存资源中内存资源大小,将内存资源中内存资源大小与预设内存资源阈值做对比,判断内存资源中内存资源大小是否大于预设内存资源阈值,若内存资源大小是否大于预设内存资源阈值,则执行步骤S203;若内存资源大小是否不大于预设内存资源阈值,则执行步骤S202。
步骤S202、若确定内存资源大小小于或等于预设内存资源阈值,则确定当前满足的字符串查找条件为线性查找条件。
本实施例中,若确定内存资源大小小于或等于预设内存资源阈值,则说明内存资源不足,需要节省已存储的驻留字符串的占用空间,一维数组占用的空间较少,所以已存储的驻留字符串以一维数组的形式在内存中存储,确定当前满足的字符串查找条件为线性查找条件。
本申请实施例中,在确定当前满足的字符串查找条件为线性查找条件后,可以采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
步骤S203、若确定内存资源大小大于预设内存资源阈值,则确定当前满足的字符串查找条件为结合查找条件。
本实施例中,若确定内存资源大小大于预设内存资源阈值,则说明内存资源充足,不需要节省已存储的驻留字符串的占用空间,可以提高查找的效率,根据哈希表及哈希表中哈希值索引对应的数据结构的查找效率较高,所以已存储的驻留字符串存储在哈希表及哈希表中哈希值索引对应的数据结构中,确定当前满足的字符串查找条件为结合查找条件。
本申请实施例中,在确定当前满足的字符串查找条件为结合查找条件后,可以根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,确定内存资源大小;若确定内存资源大小小于或等于预设内存资源阈值,则确定当前满足的字符串查找条件为线性查找条件;若确定内存资源大小大于预设内存资源阈值,则确定当前满足的字符串查找条件为结合查找条件。根据内存资源中内存资源大小确定满足的字符串查找条件为线性查找条件还是结合查找条件,在已存储的驻留字符串数量较少时,可以采用占用空间较少的二分查找算法查找目标内存驻留字符串,由于已存储的驻留字符串数量较少,不根据哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串,也不会大幅降低查找效率,却可以降低已存储的驻留字符串占用的内存,可以在降低算法时间复杂度、提高查找效率的同时,控制已存储的驻留字符串占用内存的大小。
实施例三
图4为本申请实施例三提供的内存中字符串查找方法流程图,本申请实施例在上述任意一个实施例的基础上,涉及的是满足的字符串查找条件为线性查找条件时内存中字符串查找方法,如图4所示,具体包括以下步骤:
步骤S301、将内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序。
本申请实施例中,将已存储的驻留字符串按预设排布顺序进行排序,可以使已存储的驻留字符串按规律在内存中存储。
其中,预设排布顺序可以为字母表顺序,本申请实施例对此不做具体限定。
可选地,步骤S301可以包括以下步骤:
步骤S3011、将内存中已存储的驻留字符串按照字符串中当前位置字符预设排布顺序进行排序。
示例性地,预设排布顺序为字母表顺序,可以确定已存储的驻留字符串的当前位置字符,按已存储的驻留字符串的当前位置字符在字母表中的顺序对已存储的驻留字符串进行排序。示例性地,已存储的驻留字符串可以包括ABCD、CDEF,当前位置为首字母,则按照首字母字母表顺序进行排序的ABCD的顺序在CDEF之前。
步骤S3012、若确定存在当前位置字符相同的多个已存储的驻留字符串,则针对多个已存储的驻留字符串,按照下一位置字符预设排布顺序进行排序。
具体地,若确定存在多个已存储的驻留字符串的首字母相同,则按第二位置字母在字母表中的顺序对首字母相同的多个已存储的驻留字符串;若存在多个已存储的驻留字符串的第二位置字母相同,则按第三位置字母在字母表中的顺序对首字母相同的多个已存储的驻留字符串,直至不存在当前位置字符相同的多个已存储的驻留字符串。
步骤S302、采用二分查找算法查找目标内存驻留字符串是否存在于排序后的已存储的驻留字符串中。
具体地,确定排序后的已存储的驻留字符串中间位置的已存储的驻留字符串,判断目标内存驻留字符串是否与中间位置的已存储的驻留字符串相等,若目标内存驻留字符串与中间位置的已存储的驻留字符串相同,则查找到目标内存驻留字符串;若目标内存驻留字符串与中间位置的已存储的驻留字符串不相同,则判断目标内存驻留字符串是否在中间位置的已存储的驻留字符串之前;若目标内存驻留字符串在中间位置的已存储的驻留字符串之前,则在中间位置的已存储的驻留字符串之前的已存储的驻留字符串中采用二分查找算法查找目标内存驻留字符串;若目标内存驻留字符串不在中间位置的已存储的驻留字符串之前,则在中间位置的已存储的驻留字符串之后的已存储的驻留字符串中采用二分查找算法查找目标内存驻留字符串;直至查找到目标内存驻留字符串,确定目标内存驻留字符串存在于内存的已存储的驻留字符串中;或直至不存在中间位置的已存储的驻留字符串之前的已存储的驻留字符串,以及不存在中间位置的已存储的驻留字符串之后的已存储的驻留字符串,则未查找到目标内存驻留字符串,确定目标内存驻留字符串不存在于内存的已存储的驻留字符串中。
本申请实施例中,将内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,可以满足采用二分查找算法的要求;采用二分查找算法查找目标内存驻留字符串是否存在于排序后的已存储的驻留字符串中,可以提高查找目标内存驻留字符串的效率。
实施例四
图5为本申请实施例四提供的内存中字符串查找方法流程图,本申请实施例在上述任意一个实施例的基础上,涉及的是满足的字符串查找条件为结合查找条件时,根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中之前构建哈希表及红黑树的方法,如图5所示,具体包括以下步骤:
步骤S401、计算内存中已存储的驻留字符串的哈希值。
具体地,采用哈希函数计算内存中已存储的驻留字符串的哈希值。
其中,采用的哈希函数可以为信息-摘要算法5(英文全称:Message-DigestAlgorithm 5,简称:MD5,),也可以为安全散列算法1(英文全称:Secure Hash Algorithm1,简称:SHA-1,)等,本申请实施例对此不做具体限定。
步骤S402、根据已存储的驻留字符串的哈希值计算已存储的驻留字符串的哈希值索引,以形成哈希表。
本申请实施例对根据哈希值计算哈希值索引的方式不做具体限定,根据哈希值计算哈希值索引可以减少哈希值索引的数目,从而减小哈希值索引的形成哈希表的大小。
示例性地,可以通过计算哈希值索引,将哈希表的大小控制为总已存储的驻留字符串个数的1/64。
可选地,根据哈希值计算哈希值索引的方式可以为:将已存储的驻留字符串的哈希值与预设哈希值索引个数进行取模计算,以计算获得已存储的驻留字符串的哈希值索引。
其中,预设哈希值索引个数可以根据内存的大小预先设置,内存越大预设哈希值索引个数越多。
具体地,将预设哈希值索引个数除以已存储的驻留字符串的哈希值并取模,以进行取模计算,可以获得具有预设哈希值索引个数个哈希值索引的哈希表,可以减小哈希表的大小。
步骤S403、针对每个哈希值索引,确定具有相同的哈希值索引的已存储的驻留字符串的个数。
具体地,在计算已存储的驻留字符串的哈希值索引后,确定每个哈希值索引对应的已存储的驻留字符串的个数,相同的哈希值索引的已存储的驻留字符串的个数不同,相应的处理也不同。
步骤S404、根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构。
本申请实施例中,在已存储的驻留字符串的个数较少时,可以令具有相同的哈希值索引的已存储的驻留字符串形成线性数据结构,如一维数组的形式进行存储;在已存储的驻留字符串的个数较少较多时,可以令多个具有相同的哈希值索引的已存储的驻留字符串以红黑树的形式进行存储。
本申请实施例中,计算内存中已存储的驻留字符串的哈希值;根据已存储的驻留字符串的哈希值计算已存储的驻留字符串的哈希值索引,以形成哈希表,针对每个哈希值索引,确定具有相同的哈希值索引的已存储的驻留字符串的个数,可以减少哈希值索引的数目,从而减小哈希值索引的形成哈希表的大小;根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构;可以在当前满足的字符串查找条件为结合查找条件时,降低算法时间复杂度、提高查找效率,并可以在具有相同的哈希值索引的已存储的驻留字符串数量较少时,采用占用空间较少的方式存储多个具有相同的哈希值索引的已存储的驻留字符串,由于具有相同的哈希值索引的已存储的驻留字符串数量较少,不根据哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串,也不会大幅降低查找效率,却可以降低多个具有相同的哈希值索引的已存储的驻留字符串占用的内存。
实施例五
在实施例四的基础上,本申请实施例涉及的是步骤S404根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构的实现方式,具体可以包括以下步骤:
步骤S501、判断已存储的驻留字符串的个数是否大于预设个数阈值。
具体地,在确定具有相同的哈希值索引的已存储的驻留字符串的个数后,获取预设个数阈值,将已存储的驻留字符串的个数与预设个数阈值做对比,判断已存储的驻留字符串的个数是否大于预设个数阈值,若已存储的驻留字符串的个数大于预设个数阈值,则执行步骤S4042;若已存储的驻留字符串的个数不大于预设个数阈值,则执行步骤S4043。
步骤S502、若确定大于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串转换为对应的红黑树。
本申请实施例中,可以将多个具有相同的哈希值索引的已存储的驻留字符串转换为平衡二叉树2-3树,再将2-3树转换为红黑树。
其中,转换的红黑树具有以下特质:1、每个节点都只能是红色或者黑色;2、根节点是黑色;3、每个叶节点或空节点是黑色;4、如果一个结点是红的,则它两个子节点都是黑的,也就是说在一条路径上不能出现相邻的两个红色结点;5、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
步骤S503、若确定小于或等于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,以形成一维数组。
本申请实施例中,将多个具有相同的哈希值索引的已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序的方式与步骤S301将内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序的方式类似,在此不再一一赘述。
示例性地,预设个数阈值为8,哈希值索引为123,判断哈希值索引123对应的已存储的驻留字符串的个数是否大于8个;若已存储的驻留字符串的哈希值索引为123的个数大于8个,则将哈希值索引为123的已存储的驻留字符串转换为红黑树;若已存储的驻留字符串的哈希值索引为123的个数不大于8个,将哈希值索引为123的已存储的驻留字符串按同一位置的字符预设排布顺序进行排序,以形成一维数组。
本申请实施例中,判断已存储的驻留字符串的个数是否大于预设个数阈值;若确定大于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串转换为对应的红黑树;若确定小于或等于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,以形成一维数组;可以在当前满足的字符串查找条件为结合查找条件且具有相同的哈希值索引的已存储的驻留字符串个数较少时,令已存储的驻留字符串形成一维数组,可以减少已存储的驻留字符串的占用内存,同时不影响查找效率;并可以在当前满足的字符串查找条件为结合查找条件且具有相同的哈希值索引的已存储的驻留字符串个数较多时,不考虑已存储的驻留字符串占用的内存资源,令已存储的驻留字符串转换为对应的红黑树,可以降低算法时间复杂度,提高查找效率。
实施例六
图6为本申请实施例六提供的内存中字符串查找方法流程图,在实施例五的基础上,本申请实施例涉及的是步骤S103若确定当前满足的字符串查找条件为结合查找条件,根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中的实现方式的细化,如图6所示,具体包括以下步骤:
步骤S601、计算目标内存驻留字符串的哈希值。
本申请实施例中,计算目标内存驻留字符串的哈希值的方式与步骤S401计算内存中已存储的驻留字符串的哈希值的方式类似,在此不再一一赘述。
步骤S602、根据目标内存驻留字符串的哈希值在哈希表中查找目标内存驻留字符串对应的目标哈希值索引并确定目标哈希值索引对应的已存储的驻留字符串的个数。
其中,目标哈希值索引为与目标内存驻留字符串的哈希值对应的哈希值索引。
具体地,根据目标内存驻留字符串的哈希值计算目标内存驻留字符串的目标哈希值索引;在哈希表中查找目标哈希值索引;确定目标哈希值索引对应的已存储的驻留字符串的个数,并获取预设个数阈值;将预设个数阈值与已存储的驻留字符串的个数做对比,判断已存储的驻留字符串的个数是否大于预设个数阈值;若确定已存储的驻留字符串的个数大于预设个数阈值,则执行步骤S603;若确定已存储的驻留字符串的个数不大于预设个数阈值,则执行步骤S604。
步骤S603、若确定已存储的驻留字符串的个数大于预设个数阈值,则获取目标哈希值索引的红黑树,并采用红黑树算法在红黑树中对目标内存驻留字符串进行查找,以确定目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,若确定已存储的驻留字符串的个数大于预设个数阈值,则目标哈希值索引对应的已存储的驻留字符串按红黑树形式存储,因此采用红黑树算法在红黑树中对目标内存驻留字符串进行查找。其中,采用的红黑树算法可以为前序查找的红黑树算法、中序查找的红黑树算法,后序查找的红黑树算法等,本申请实施例对此不做具体限定。
步骤S604、若确定已存储的驻留字符串的个数小于或等于预设个数阈值,则获取目标哈希值索引的一维数组,并在一维数组中查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施例中,若确定已存储的驻留字符串的个数小于或等于预设个数阈值,则目标哈希值索引对应的已存储的驻留字符串按一维数组形式存储,因此在一维数组中查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
本申请实施对在一维数组中查找目标内存驻留字符串的方式不做作具体限定,例如,可以采用遍历查找的方式在一维数组中查找,也可以采用采用二分查找算法在一维数组中查找。
本申请实施例中,确定当前满足的字符串查找条件为结合查找条件时,通过计算目标内存驻留字符串的哈希值,根据目标内存驻留字符串的哈希值在哈希表中查找目标内存驻留字符串对应的目标哈希值索引并确定目标哈希值索引对应的已存储的驻留字符串的个数;根据目标哈希值索引对应的已存储的驻留字符串的个数确定在一维数组中查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中,还是采用红黑树算法在红黑树中对目标内存驻留字符串进行查找;可以在已存储的驻留字符串数量较少时,在一维数组中查找目标内存驻留字符串,可以降低已存储的驻留字符串占用的内存,并且不会大幅降低查找效率;可以在已存储的驻留字符串数量较多时,可以在不考虑已存储的驻留字符串占用的内存资源,在红黑树中查找目标内存驻留字符串,可以降低算法时间复杂度、提高查找效率。
实施例七
图7为本申请实施例七提供的内存中字符串查找方法流程图,在上述任一实施例的基础上,本申请实施例涉及的是确定目标内存驻留字符串存在于内存中之后的步骤,如图7所示,具体包括以下步骤:
步骤S701、若确定目标内存驻留字符串存在于内存中,则根据预设索引策略确定目标内存驻留字符串的总索引。
本申请实施例中,预设索引策略为定义目标内存驻留字符串存储位置的策略。示例性地,预设索引策略可以通过目标内存驻留字符串在哈希表中的位置、已存储的驻留字符串的存储形式、在一维数组中或在红黑树中的位置定义目标内存驻留字符串存储位置。
示例性地,预设索引策略可以为:若字符串查找条件为线性查找条件,则总索引为四位数,表示目标内存驻留字符串在一维数组中的位置;若字符串查找条件为结合查找条件,则总索引为五位数,前三位数表示目标内存驻留字符串在哈希表中的位置,第四位数表示在已存储的驻留字符串的存储形式,第五位数表示在一维数组中或在红黑树中的位置。
例如,根据预设索引策略确定的目标内存驻留字符串的总索引可以为0005,表示目标内存驻留字符串在一维数组中的第5个位置。根据预设索引策略确定的目标内存驻留字符串的总索引可以为12315,123表示目标内存驻留字符串在哈希表中第123个位置,1表示在已存储的驻留字符串的存储形式为红黑树,5表示目标内存驻留字符串在红黑树中的第5个位置。
步骤S702、对目标内存驻留字符串的总索引进行存储。
具体地,将确定目标内存驻留字符串的总索引存储于内存中。
步骤S703、若确定待查找内存驻留字符串仍为目标内存驻留字符串,则根据总索引确定与目标内存驻留字符串具有映射关系的底层编码字符串。
具体地,在确定目标内存驻留字符串存在于内存中,并对目标内存驻留字符串的总索引进行存储后,确定下一待查找内存驻留字符串,若下一待查找内存驻留字符串为查找过的目标内存驻留字符串,则下一待查找内存驻留字符串存在于内存中,则根据总索引确定目标内存驻留字符串与对应底层编码字符串的映射关系的存储位置,从而确定与目标内存驻留字符串具有映射关系的底层编码字符串。
本申请实施例中,通过确定目标内存驻留字符串的总索引,根据预设索引策略确定目标内存驻留字符串的总索引,可以在待查找内存驻留字符串仍为目标内存驻留字符串时,直接根据总索引确定与目标内存驻留字符串具有映射关系的底层编码字符串,可以提高确定与目标内存驻留字符串具有映射关系的底层编码字符串的效率,从而提高执行命令实现目标功能的效率。
实施例八
图8为本申请实施例八提供的内存中字符串查找装置结构示意图。本申请实施例提供的内存中字符串查找装置结构示意图可以执行内存中字符串查找方法实施例一提供的处理流程。如图8所示,该内存中字符串查找装置80包括:获取模块801,确定模块802,查找模块803。
具体地,获取模块801,用于获取待查找的目标内存驻留字符串,目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写。
确定模块802,用于确定当前满足的字符串查找条件;
查找模块803,用于若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
可选地,确定模块802具体用于:确定内存资源大小;若确定内存资源大小小于或等于预设内存资源阈值,则确定当前满足的字符串查找条件为线性查找条件;若确定内存资源大小大于预设内存资源阈值,则确定当前满足的字符串查找条件为结合查找条件。
可选地,内存中字符串查找装置80还包括:构建模块;构建模块用于将内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序;查找模块803,具体用于采用二分查找算法查找目标内存驻留字符串是否存在于排序后的已存储的驻留字符串中。
可选地,构建模块具体用于:将内存中已存储的驻留字符串按照字符串中当前位置字符预设排布顺序进行排序;若确定存在当前位置字符相同的多个已存储的驻留字符串,则针对多个已存储的驻留字符串,按照下一位置字符预设排布顺序进行排序。
可选地,构建模块还用于:计算内存中已存储的驻留字符串的哈希值;根据已存储的驻留字符串的哈希值计算已存储的驻留字符串的哈希值索引,以形成哈希表;针对每个哈希值索引,确定具有相同的哈希值索引的已存储的驻留字符串的个数;根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构。
可选地,构建模块具体用于:将已存储的驻留字符串的哈希值与预设哈希值索引个数进行取模计算,以计算获得已存储的驻留字符串的哈希值索引。
可选地,构建模块具体用于:判断已存储的驻留字符串的个数是否大于预设个数阈值;若确定大于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串转换为对应的红黑树;若确定小于或等于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,以形成一维数组。
可选地,查找模块803具体用于:计算目标内存驻留字符串的哈希值;根据目标内存驻留字符串的哈希值在哈希表中查找目标内存驻留字符串对应的目标哈希值索引并确定目标哈希值索引对应的已存储的驻留字符串的个数;若确定已存储的驻留字符串的个数大于预设个数阈值,则获取目标哈希值索引的红黑树,并采用红黑树算法在红黑树中对目标内存驻留字符串进行查找,以确定目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定已存储的驻留字符串的个数小于或等于预设个数阈值,则获取目标哈希值索引的一维数组,并在一维数组中查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
可选地,内存中字符串查找装置80还包括:执行模块;执行模块用于若确定目标内存驻留字符串存在于内存中,则根据查找到的目标内存驻留字符串确定与其具有映射关系的底层编码字符串;按照底层编码字符串对应的函数代码执行目标功能。
可选地,构建模块还用于:若确定目标内存驻留字符串存在于内存中,则根据预设索引策略确定目标内存驻留字符串的总索引;对目标内存驻留字符串的总索引进行存储;查找模块803还用于:若确定待查找内存驻留字符串仍为目标内存驻留字符串,则根据总索引确定与目标内存驻留字符串具有映射关系的底层编码字符串。
本申请实施例提供的装置可以具体用于执行上述实施例二到实施例七任一方法实施例,具体功能此处不再赘述。
实施例九
图9为本申请实施例九提供的电子设备的结构示意图。如图9所示,该电子设备90包括:处理器901,以及与处理器901通信连接的存储器902.
其中,处理器901及存储器902之间电路互连;存储器902存储计算机执行指令;处理器901执行存储器902存储的计算机执行指令,以实现上述任一实施例提供的内存中字符串查找方法。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时实现上述任一方法实施例提供的方法。
本申请实施例还提供了一种计算机程序产品,程序产品包括:计算机执行指令,计算机执行指令存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机执行指令,至少一个处理器执行计算机执行指令使得电子设备执行上述任一方法实施例提供的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (14)
1.一种内存中字符串查找方法,其特征在于,包括:
获取待查找的目标内存驻留字符串,所述目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;
确定当前满足的字符串查找条件;
若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;
若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
2.根据权利要求1所述的方法,其特征在于,所述确定当前满足的字符串查找条件,包括:
确定所述内存资源大小;
若确定所述内存资源大小小于或等于预设内存资源阈值,则确定所述当前满足的字符串查找条件为线性查找条件;
若确定内存资源大小大于预设内存资源阈值,则确定所述当前满足的字符串查找条件为结合查找条件。
3.根据权利要求1所述的方法,其特征在于,所述采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中之前,还包括:
将所述内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序;
所述采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中,包括:
采用二分查找算法查找目标内存驻留字符串是否存在于排序后的已存储的驻留字符串中。
4.根据权利要求3所述的方法,其特征在于,所述将所述内存中已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,包括:
将所述内存中已存储的驻留字符串按照字符串中当前位置字符预设排布顺序进行排序;
若确定存在当前位置字符相同的多个已存储的驻留字符串,则针对多个已存储的驻留字符串,按照下一位置字符预设排布顺序进行排序。
5.根据权利要求1所述的方法,其特征在于,所述根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中之前,还包括:
计算所述内存中已存储的驻留字符串的哈希值;
根据所述已存储的驻留字符串的哈希值计算已存储的驻留字符串的哈希值索引,以形成哈希表;
针对每个哈希值索引,确定具有相同的哈希值索引的已存储的驻留字符串的个数;
根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构。
6.根据权利要求5所述的方法,其特征在于,所述根据所述已存储的驻留字符串的哈希值计算已存储的驻留字符串的哈希值索引,包括:
将已存储的驻留字符串的哈希值与预设哈希值索引个数进行取模计算,以计算获得已存储的驻留字符串的哈希值索引。
7.根据权利要求6所述的方法,其特征在于,所述根据已存储的驻留字符串的个数对多个具有相同的哈希值索引的已存储的驻留字符串生成对应的数据结构,包括:
判断已存储的驻留字符串的个数是否大于预设个数阈值;
若确定大于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串转换为对应的红黑树;
若确定小于或等于预设个数阈值,则将多个具有相同的哈希值索引的已存储的驻留字符串按照字符串中同一位置的字符预设排布顺序进行排序,以形成一维数组。
8.根据权利要求7所述的方法,其特征在于,所述根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中,包括:
计算所述目标内存驻留字符串的哈希值;
根据所述目标内存驻留字符串的哈希值在所述哈希表中查找目标内存驻留字符串对应的目标哈希值索引并确定所述目标哈希值索引对应的已存储的驻留字符串的个数;
若确定已存储的驻留字符串的个数大于预设个数阈值,则获取目标哈希值索引的红黑树,并采用红黑树算法在所述红黑树中对所述目标内存驻留字符串进行查找,以确定目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;
若确定已存储的驻留字符串的个数小于或等于预设个数阈值,则获取目标哈希值索引的一维数组,并在所述一维数组中查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
9.根据权利要求1-8任一项所述的方法,其特征在于,还包括:
若确定目标内存驻留字符串存在于内存中,则根据查找到的目标内存驻留字符串确定与其具有映射关系的底层编码字符串;
按照底层编码字符串对应的函数代码执行所述目标功能。
10.根据权利要求1-8任一项所述的方法,其特征在于,还包括:
若确定目标内存驻留字符串存在于内存中,则根据预设索引策略确定目标内存驻留字符串的总索引;
对所述目标内存驻留字符串的总索引进行存储;
若确定待查找内存驻留字符串仍为目标内存驻留字符串,则根据所述总索引确定与所述目标内存驻留字符串具有映射关系的底层编码字符串。
11.一种内存中字符串查找装置,其特征在于,包括:
获取模块,用于获取待查找的目标内存驻留字符串,所述目标内存驻留字符串与实现设备的目标功能对应函数的函数名一致;执行目标功能对应函数的命令采用Python编程语言编写;
确定模块,用于确定当前满足的字符串查找条件;
查找模块,用于若确定当前满足的字符串查找条件为线性查找条件,则采用二分查找算法查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中;若确定当前满足的字符串查找条件为结合查找条件,则根据已存储的驻留字符串对应的哈希表及哈希表中哈希值索引对应的数据结构查找目标内存驻留字符串是否存在于内存的已存储的驻留字符串中。
12.一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-10中任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-10中任一项所述的方法。
14.一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210303785.4A CN114625933A (zh) | 2022-03-24 | 2022-03-24 | 内存中字符串查找方法、装置、设备、存储介质及产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210303785.4A CN114625933A (zh) | 2022-03-24 | 2022-03-24 | 内存中字符串查找方法、装置、设备、存储介质及产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114625933A true CN114625933A (zh) | 2022-06-14 |
Family
ID=81903342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210303785.4A Pending CN114625933A (zh) | 2022-03-24 | 2022-03-24 | 内存中字符串查找方法、装置、设备、存储介质及产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114625933A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115396395A (zh) * | 2022-08-25 | 2022-11-25 | 北京发现角科技有限公司 | 确定ip地址的地理位置的方法及装置 |
-
2022
- 2022-03-24 CN CN202210303785.4A patent/CN114625933A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115396395A (zh) * | 2022-08-25 | 2022-11-25 | 北京发现角科技有限公司 | 确定ip地址的地理位置的方法及装置 |
CN115396395B (zh) * | 2022-08-25 | 2023-05-12 | 北京发现角科技有限公司 | 确定ip地址的地理位置的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10445334B1 (en) | Query transmission in type-limited interchange formats | |
US11075991B2 (en) | Partitioning data according to relative differences indicated by a cover tree | |
CN111249736B (zh) | 代码处理方法及装置 | |
JP7047228B2 (ja) | データ照会方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム | |
JPS6120129A (ja) | 複数コ−ド系情報処理方式 | |
CN109800337B (zh) | 一种适用于大字母表的多模式正则匹配算法 | |
US11755555B2 (en) | Storing an ordered associative array of pairs using an append-only storage medium | |
CN105706092A (zh) | 四值模拟的方法和系统 | |
CN113312175A (zh) | 一种算子确定、运行方法及装置 | |
EP3387525A1 (en) | Learning from input patterns in programing-by-example | |
CN114625933A (zh) | 内存中字符串查找方法、装置、设备、存储介质及产品 | |
CN111259003B (zh) | 一种数据库建立方法及装置 | |
US20210365406A1 (en) | Method and apparatus for processing snapshot, device, medium and product | |
CN102725754B (zh) | 一种索引数据处理方法及设备 | |
CN111767287A (zh) | 数据导入方法、装置、设备及计算机存储介质 | |
CN107315801B (zh) | 并行离散事件仿真系统初始化数据存储方法 | |
US10289710B2 (en) | Method for modifying root node, and modification apparatus | |
US20210073176A1 (en) | Method, device, and computer program product for managing index of storage system | |
CN108108472B (zh) | 数据处理方法以及服务器 | |
CN115801020B (zh) | 确定有限状态自动机压缩方法、匹配方法、设备及介质 | |
CN111190917B (zh) | 一种数据处理方法及装置 | |
CN113946580B (zh) | 一种海量异构日志数据检索中间件 | |
US11379449B2 (en) | Method, electronic device and computer program product for creating metadata index | |
US11893012B1 (en) | Content extraction using related entity group metadata from reference objects | |
CN111159218B (zh) | 数据处理方法、装置及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |