一种重复代码扫描方法、装置和电子设备与流程

allin2023-03-16  58



1.本发明涉及软件开发领域,具体涉及一种重复代码扫描方法、装置和电子设备。


背景技术:

2.随着面向对象编程的流行,即app组件化、模块化的开发模式,原有的大功能被拆分为多个小模块,不同模块由不同团队负责。在开发过程中,往往由于组件化拆分后,没有及时下沉基础组件,导致相同代码拷贝到各个项目中,从而导致app包中存在不少相似/相同功能的重复代码。该问题不仅会导致用户下载app时花费更多的流量,而且对于开发者来说,随着系统的复杂性逐步上,需要维护的成本也越来越高。基于此,代码的重复性扫描是软件开发过程中比较重要的一个步骤。现有技术扫描重复代码的常规思路是按一定大小划分模块,逐字对比两个模块的每个字符内容是否完全相等。判断当前类是否有重复代码时,扫描的范围为除了当前类本身之外的所有其他类,其时间复杂度为o(n)=(n2-n)/2,其中n为类的数量。而大型互联网公司项目类的数量规模在几万到十几万不等,全量扫描耗时过长。


技术实现要素:

3.有鉴于此,本发明实施方式提供了一种重复代码扫描方法、装置和电子设备,从而提高了重复代码的扫描速度。
4.根据第一方面,本发明实施例提供了一种重复代码扫描方法,所述方法包括:获取目标应用程序包运行时加载的全部类;基于各个类的功能,将表征同种功能的类划分到同一个组;分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。
5.可选地,所述基于各个类的功能,将表征同种功能的类划分到同一个组,包括:基于页面展示功能、局部展示功能、网络功能以及工具类对各个类进行分组。
6.可选地,所述分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记,包括:计算当前组内参与比对的两个类的字符串相似度;基于所述两个类的字符串相似度,判定参与比对的两个类是否包含重复代码;若判定参与比对的两个类包含重复代码,则将所述当前组内参与比对的两个类标记为重复类。
7.可选地,所述计算当前组内参与比对的两个类的字符串相似度,包括:分别计算当前组内参与比对的两个类的类名称、字段名称和方法名称的字符串相似度。
8.可选地,所述基于所述两个类的字符串相似度,判定参与比对的两个类是否包含重复代码,包括:判断参与比对的两个类的类名称的字符串相似度是否大于类名预设阈值;若大于所述类名预设阈值,则判断两个类的字段名称的字符串相似度是否大于字段预设阈值;若大于所述字段预设阈值,则判断两个类的方法名称的字符串相似度是否大于方法预设阈值;若大于所述方法预设阈值,则基于所述类名称的字符串相似度、字段名称的字符串相似度和方法名称的字符串相似度生成综合相似度;判断所述综合相似度是否大于综合预
设阈值;若所述综合相似度大于综合预设阈值,确定所述参与比对的两个类包含重复代码。
9.可选地,计算当前组内参与比对的两个类的类名称或字段名称或方法名称的字符串相似度的步骤,包括:获取当前组内参与比对的两个类的类名称或字段名称或方法名称中的全部字符,生成词包;基于当前组内参与比对的两个类的类名称或字段名称或方法名称中的字符是否包含在所述词包内,生成两个类一一对应的对比向量;计算两个对比向量之间的向量相似度,并基于所述向量相似度确定当前组内参与比对的两个类的类名称或字段名称或方法名称的字符串相似度。
10.可选地,所述获取目标应用程序包运行时加载的全部类,包括:在所述目标应用程序包中各个类的位置插入探针;运行所述目标应用程序包,并根据所述探针的响应结果获取所述目标应用程序包运行时加载的全部类。
11.根据第二方面,本发明实施例提供了一种重复代码扫描装置,所述装置包括:类提取模块,用于获取目标应用程序包运行时加载的全部类;类分组模块,用于基于各个类的功能,将表征同种功能的类划分到同一个组;重复扫描模块,用于分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。
12.根据第三方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。
13.根据第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机从而执行第一方面,或者第一方面任意一种可选实施方式中所述的方法。
14.本技术提供的技术方案,具有如下优点:
15.本技术提供的技术方案,获取目标应用程序包运行时加载的全部类,然后基于各个类的功能,将表征同种功能的类划分到同一个组。分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。本方案结合项目工程特性,将类基于功能进行维度划分,缩小对比范围,只在组内进行对比。其中不同组的类一定不会互为重复。优化后的时间复杂度为o(n)=(n2-nk)/2k,其中k为分组数量,n为全部类的数量,时间复杂度约为常规方案的k分之一,大幅度提高了重复代码的扫描速度。
16.此外,将重复的判定标准由两个类完全相等,改为相似度判定,结合类中的多种名称进行相似度判定,提高了重复的命中率。
附图说明
17.通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
18.图1示出了本发明一个实施方式中一种重复代码扫描方法的步骤示意图;
19.图2示出了本发明一个实施方式中一种重复代码扫描方法的流程示意图;
20.图3示出了本发明一个实施方式中计算字符串相似度的流程示意图;
21.图4示出了本发明一个实施方式中一种重复代码扫描装置的结构示意图;
22.图5示出了本发明一个实施方式中一种电子设备的结构示意图。
具体实施方式
23.为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
24.请参阅图1和图2,在一个实施方式中,一种重复代码扫描方法,具体包括以下步骤:
25.步骤s101:获取目标应用程序包运行时加载的全部类。
26.步骤s102:基于各个类的功能,将表征同种功能的类划分到同一个组。
27.步骤s103:分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。
28.具体地,对目标应用程序包内的重复代码进行扫描的过程,相比现有技术将各个类两两进行逐字符比对不同,在本实施例中,首先获取目标应用程序包运行时加载的全部类。然后结合android/java、ios、python等项目的工程特性,以面向对象编程中的class类为单位,将类按照功能进行维度划分,缩小对比范围,不同功能的类被分到不同的组,保证不同组之间的类绝对不同,组内类由于功能类似,因此组内调用的第三方组件,或原创开发的代码存在相似度较高的可能性,每个组只在组内进行对比。其中不同组的类一定不会互为重复,可以通过项目中类路径、类命名等信息的划分来实现。最后,分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。通过上述步骤,优化后重复代码扫描的时间复杂度为o(n)=(n2-nk)/2k,其中k为分组数量,n为全部类的数量。时间复杂度约为常规方案的k分之一。例如:n=100,常规方案对比次数为4950次。优化方案当k为10组时,对比次数仅为450次,大幅度提高了重复代码的扫描速度。
29.具体地,在本实施例中,步骤s101,具体包括如下步骤:
30.步骤一:在目标应用程序包中各个类的位置插入探针。
31.步骤二:运行目标应用程序包,并根据探针的响应结果获取目标应用程序包运行时加载的全部类。
32.具体地,本实施例通过插桩法获取目标应用程序包运行时加载地全部类,将探针预先插入目标应用程序包中各个类的结尾,之后运行目标应用程序包,其中在目标应用程序包运行时加载的类均会在加载之后被预先插入的探针捕捉,之后根据探针响应的结果即可准确、便捷地获取到目标应用程序包运行时加载的全部类。
33.具体地,在一实施例中,上述步骤s102,具体包括如下步骤:
34.步骤三:基于页面展示功能、局部展示功能、网络功能以及工具类对各个类进行分组。具体地,在本实施例中,将类的功能分为用于提供页面绘制功能的类、用于提供部分屏幕内容展示的局部展示功能的类、用于接收/发送网络请求的类、用于处理一些通用逻辑的静态方法集合的工具类以及除上述功能以外的其他功能类,从而实现归属不同组的类之间不会重复,无需进行重复比对,只需对组内的类进行比对,提高重复代码扫描的效率。
35.具体地,在一实施例中,当前目标应用程序包是基于android/java开发的项目,从而基于页面展示功能对类进行分组包括以下步骤:
36.1.将以activity、fragment结尾的类文件分为一组;
37.2.将mvp架构中的以presenter、contract结尾的类文件分为一组;
38.3.将mvvm架构中的以viewmodel结尾的类文件分为一组。
39.基于局部展示功能对类进行分组包括以下步骤:
40.4.将以view、dialog、adapter等结尾的类文件分为一组。
41.基于网络功能对类进行分组包括以下步骤:
42.5.将以bean、request等结尾的类文件分为一组。
43.之后,基于工具类进行分组的步骤为,将以util、utils等结尾的类文件分为一组,最后将不属于上述任何分组的类文件归为一组。
44.其中,activity是android中用于提供页面绘制的容器,可以通俗理解为app中一个页面即为一个activity容器。fragment是android中作为单个屏幕或部分屏幕的展示容器,展示在activity中,内容范围比activity小,但比view的范围大;view是android中作为部分屏幕内容的展示容器,展示在activity或者fragment中,内容范围比fragment小,只能展示局部屏幕内容;dialog是android中的对话框,类似于view;在java或android中负责发送/接受网络请求的模块,其中包括负责发送网络内容的实体req类、负责接收请求内容实体resp类、负责发起网络请求的request类、负责网络内容解析的parser类等;工具类部分在java或android中被定义,用于处理一些通用逻辑的静态方法集合的类。
45.基于上述分组,在android/java开发的项目中,保证了不同组的类一定不会互为重复,为减少后续android/java项目的重复代码扫描次数,奠定了基础。
46.具体地,在一实施例中,上述步骤s103,具体包括如下步骤:
47.步骤四:计算当前组内参与比对的两个类的字符串相似度。
48.步骤五:基于两个类的字符串相似度,判定参与比对的两个类是否包含重复代码。
49.步骤六:若判定参与比对的两个类包含重复代码,则将当前组内参与比对的两个类标记为重复类。
50.具体地,在本实施例中,通过引入相似度概念,将重复的判定标准由两个类完全相等,改为相似度大于预设阈值,主体内容相似即可认定为重复,从而提高重复的命中率,本实施例中,相似度的具体衡量方法通过字符串相似度的得到,从而更加贴切代码的字符表示。例如计算两串字符的“余弦相似性(cosine similarity)”,下文将以该算法举例具体说明本方案。
51.具体地,在一实施例中,上述步骤四,具体包括如下步骤:
52.步骤七:分别计算当前组内参与比对的两个类的类名称、字段名称和方法名称的字符串相似度。
53.具体地,基于java的面向对象编程中,所有的类通常都包括一个或多个字段、一个或多个方法,假设一个类的类名为student,字段field即类中的“年龄”、“性别”、“姓名”等需要限定的条件,方法method即该类中执行的具体方法,例如“输出年龄”。除此之外,还有修饰符等等。本实施例通过一一比对两个类的类名称、字段名称和方法名称的字符串相似度,从而达到了以最小比对次数,实现最准确比对的目的,不仅提高了代码重复扫描的效率,还不丧失准确性。此外,若在比对时间允许的条件下,为了进一步提高比对准确率,还可以增加参数、返回值的比对步骤。
54.具体地,在本实施例中,上述步骤五,具体包括如下步骤:
55.步骤八:判断参与比对的两个类的类名称的字符串相似度是否大于类名预设阈值。
56.步骤九:若大于类名预设阈值,则判断两个类的字段名称的字符串相似度是否大于字段预设阈值。
57.步骤十:若大于字段预设阈值,则判断两个类的方法名称的字符串相似度是否大于方法预设阈值。
58.步骤十一:若大于方法预设阈值,则基于类名称的字符串相似度、字段名称的字符串相似度和方法名称的字符串相似度生成综合相似度。
59.步骤十二:判断综合相似度是否大于综合预设阈值。
60.步骤十三:若综合相似度大于综合预设阈值,确定参与比对的两个类包含重复代码。
61.具体地,在本实施例中,分别为类名称比对、字段名称比对和方法名称比对设定比对阈值,首先比对两个类名称的字符串相似度,若两个类名称的字符串相似度大于类名预设阈值(例如80%),则进入下一步比对,否则直接跳出比对,认为当前参与比对的两个类不是同一个类。下一步将字段名称的字符串相似度和字段预设阈值进行比对,同理,若两个类的字段名称的字符串相似度大于预设阈值,则再次进入下一步比对,否则直接跳出比对,认为当前参与比对的两个类不是同一个类。之后利用方法名称的字符串相似度和方法预设阈值进行比对。当方法名称的字符串相似度大于方法预设阈值时,进行最后的综合预设阈值比对。首先基于类名称的字符串相似度、字段名称的字符串相似度和方法名称的字符串相似度生成综合相似度,例如:本实施例可采用加权求和的方法计算综合相似度,类名称相似度、字段名称相似度和方法名称相似度的权重分别分配为0.5、0.3、0.2,那么综合相似度=0.5*类名称的字符串相似度+0.3*字段名称的字符串相似度+0.2*方法名称的字符串相似度,之后将综合相似度与综合预设阈值进行比对,例如综合预设阈值为50%,若综合相似度大于50%,则认为两个类包含大量的重复代码,从而判定两个类为重复类,将当前组内参与比对的两个类标记为重复类。本实施例通过多重阈值比对,若两个类的比对过程没有满足上述任何一个条件,均不认为是重复类,避免了误判;一旦参与比对的两个类满足上述所有条件,那么参与比对的类为重复类的概率显著增加,从而进一步提高了代码重复扫描的准确性。
62.具体地,在一实施例中,计算参与比对的两个类的类名称的字符串相似度,或者计算字段名称的字符串相似度,或者计算方法名称的字符串相似度的具体步骤如下:
63.步骤十四:获取当前组内参与比对的两个类的类名称或字段名称或方法名称中的全部字符,生成词包。
64.步骤十五:基于当前组内参与比对的两个类的类名称或字段名称或方法名称中的字符是否包含在词包内,生成两个类一一对应的对比向量。
65.步骤十六:计算两个对比向量之间的向量相似度,并基于向量相似度确定当前组内参与比对的两个类的类名称或字段名称或方法名称的字符串相似度。
66.具体地,如图3所示,在本实施例中,首先获取当前组内参与比对的两个类的类名称或字段名称或方法名称中的全部字符,生成词包。以字段名称为例,假设两个字段名称分
别为:
67.string1=“route”68.string2=“routerinfo”69.提取全部字符生成词包为{

r’,

o’,

u’,

t’,

e’,

r’,

i’,

n’,

f’}。
70.之后,通过判定当前组内参与比对的两个类的类名称或字段名称或方法名称中的字符是否包含在词包内,生成两个类一一对应的对比向量。例如:若使用0,1判断元素是否在词包中(本发明仅以此举例,不以此为限),字符串1、2可以转化为:stringa=[111110000]、stringb=[111111111]。最后通过计算两个向量的相似度,即可通过向量相似度得到两个名称的字符串相似度,例如基于余弦相似度计算出上述两个向量相似度的值为0.555。通过本实施例的处理步骤,即可将抽象的字符串转化为可处理的数字向量,从而计算得到准确的字符串相似度。
[0071]
通过上述步骤,本技术提供的技术方案,获取目标应用程序包运行时加载的全部类,然后基于各个类的功能,将表征同种功能的类划分到同一个组。分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。本方案结合项目工程特性,将类基于功能进行维度划分,缩小对比范围,只在组内进行对比。其中不同组的类一定不会互为重复。优化后的时间复杂度为o(n)=(n2-nk)/2k,其中k为分组数量,n为全部类的数量,时间复杂度约为常规方案的k分之一,大幅度提高了重复代码的扫描速度。
[0072]
此外,将重复的判定标准由两个类完全相等,改为相似度判定,结合类中的多种名称进行相似度判定,提高了重复的命中率。
[0073]
如图4所示,本实施例还提供了一种重复代码扫描装置,该装置包括:
[0074]
类提取模块101,用于获取目标应用程序包运行时加载的全部类。详细内容参见上述方法实施例中步骤s101的相关描述,在此不再进行赘述。
[0075]
类分组模块102,用于基于各个类的功能,将表征同种功能的类划分到同一个组。详细内容参见上述方法实施例中步骤s102的相关描述,在此不再进行赘述。
[0076]
重复扫描模块103,用于分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。详细内容参见上述方法实施例中步骤s103的相关描述,在此不再进行赘述。
[0077]
本发明实施例提供的重复代码扫描装置,用于执行上述实施例提供的重复代码扫描方法,其实现方式与原理相同,详细内容参见上述方法实施例的相关描述,不再赘述。
[0078]
通过上述各个组成部分的协同合作,本技术提供的技术方案,获取目标应用程序包运行时加载的全部类,然后基于各个类的功能,将表征同种功能的类划分到同一个组。分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。本方案结合项目工程特性,将类基于功能进行维度划分,缩小对比范围,只在组内进行对比。其中不同组的类一定不会互为重复。优化后的时间复杂度为o(n)=(n2-nk)/2k,其中k为分组数量,n为全部类的数量,时间复杂度约为常规方案的k分之一,大幅度提高了重复代码的扫描速度。
[0079]
此外,将重复的判定标准由两个类完全相等,改为相似度判定,结合类中的多种名称进行相似度判定,提高了重复的命中率。
[0080]
图5示出了本发明实施例的一种电子设备,该设备包括处理器901和存储器902,可
以通过总线或者其他方式连接,图5中以通过总线连接为例。
[0081]
处理器901可以为中央处理器(central processing unit,cpu)。处理器901还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0082]
存储器902作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如上述方法实施例中的方法所对应的程序指令/模块。处理器901通过运行存储在存储器902中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的方法。
[0083]
存储器902可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器901所创建的数据等。此外,存储器902可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器902可选包括相对于处理器901远程设置的存储器,这些远程存储器可以通过网络连接至处理器901。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0084]
一个或者多个模块存储在存储器902中,当被处理器901执行时,执行上述方法实施例中的方法。
[0085]
上述电子设备具体细节可以对应参阅上述方法实施例中对应的相关描述和效果进行理解,此处不再赘述。
[0086]
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,实现的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;存储介质还可以包括上述种类的存储器的组合。
[0087]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

技术特征:
1.一种重复代码扫描方法,其特征在于,所述方法包括:获取目标应用程序包运行时加载的全部类;基于各个类的功能,将表征同种功能的类划分到同一个组;分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。2.根据权利要求1所述的方法,其特征在于,所述基于各个类的功能,将表征同种功能的类划分到同一个组,包括:基于页面展示功能、局部展示功能、网络功能以及工具类对各个类进行分组。3.根据权利要求1所述的方法,其特征在于,所述分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记,包括:计算当前组内参与比对的两个类的字符串相似度;基于所述两个类的字符串相似度,判定参与比对的两个类是否包含重复代码;若判定参与比对的两个类包含重复代码,则将所述当前组内参与比对的两个类标记为重复类。4.根据权利要求3所述的方法,其特征在于,所述计算当前组内参与比对的两个类的字符串相似度,包括:分别计算当前组内参与比对的两个类的类名称、字段名称和方法名称的字符串相似度。5.根据权利要求4所述的方法,其特征在于,所述基于所述两个类的字符串相似度,判定参与比对的两个类是否包含重复代码,包括:判断参与比对的两个类的类名称的字符串相似度是否大于类名预设阈值;若大于所述类名预设阈值,则判断两个类的字段名称的字符串相似度是否大于字段预设阈值;若大于所述字段预设阈值,则判断两个类的方法名称的字符串相似度是否大于方法预设阈值;若大于所述方法预设阈值,则基于所述类名称的字符串相似度、字段名称的字符串相似度和方法名称的字符串相似度生成综合相似度;判断所述综合相似度是否大于综合预设阈值;若所述综合相似度大于综合预设阈值,确定所述参与比对的两个类包含重复代码。6.根据权利要求4所述的方法,其特征在于,计算当前组内参与比对的两个类的类名称或字段名称或方法名称的字符串相似度的步骤,包括:获取当前组内参与比对的两个类的类名称或字段名称或方法名称中的全部字符,生成词包;基于当前组内参与比对的两个类的类名称或字段名称或方法名称中的字符是否包含在所述词包内,生成两个类一一对应的对比向量;计算两个对比向量之间的向量相似度,并基于所述向量相似度确定当前组内参与比对的两个类的类名称或字段名称或方法名称的字符串相似度。7.根据权利要求1所述的方法,其特征在于,所述获取目标应用程序包运行时加载的全部类,包括:在所述目标应用程序包中各个类的位置插入探针;
运行所述目标应用程序包,并根据所述探针的响应结果获取所述目标应用程序包运行时加载的全部类。8.一种重复代码扫描装置,其特征在于,所述装置包括:类提取模块,用于获取目标应用程序包运行时加载的全部类;类分组模块,用于基于各个类的功能,将表征同种功能的类划分到同一个组;重复扫描模块,用于分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。9.一种电子设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行如权利要求1-7任一项所述的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机从而执行如权利要求1-7任一项所述的方法。

技术总结
本发明公开了一种重复代码扫描方法、装置和电子设备,该方法包括:获取目标应用程序包运行时加载的全部类;基于各个类的功能,将表征同种功能的类划分到同一个组;分别将每一个组内的类两两进行代码比对,筛选存在重复代码的类进行重复类标记。本发明提供的技术方案,结合项目工程特性,将类基于功能进行维度划分,缩小对比范围,只在组内进行对比。其中不同组的类一定不会互为重复。优化后的时间复杂度为O(n)=(n2-nk)/2k,其中k为分组数量,n为全部类的数量,时间复杂度约为常规方案的k分之一,大幅度提高了重复代码的扫描速度。大幅度提高了重复代码的扫描速度。大幅度提高了重复代码的扫描速度。


技术研发人员:李墨磊
受保护的技术使用者:北京自如信息科技有限公司
技术研发日:2022.04.21
技术公布日:2022/7/5
转载请注明原文地址: https://www.8miu.com/read-6199.html

最新回复(0)