CN111124424A - 一种算法复杂度分析的方法和装置 - Google Patents
一种算法复杂度分析的方法和装置 Download PDFInfo
- Publication number
- CN111124424A CN111124424A CN201911376280.5A CN201911376280A CN111124424A CN 111124424 A CN111124424 A CN 111124424A CN 201911376280 A CN201911376280 A CN 201911376280A CN 111124424 A CN111124424 A CN 111124424A
- Authority
- CN
- China
- Prior art keywords
- layer function
- complexity
- threshold
- function
- exceeding
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种算法复杂度分析的方法和装置,所述方法包括:接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,获取所述复杂度超过复杂阈值的第i+1层函数;确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间,提高开发人员对函数运行时间进行分析的效率。
Description
技术领域
本申请涉及互联网技术领域,特别涉及一种算法复杂度分析的方法和装置、计算设备及计算机可读存储介质。
背景技术
算法复杂度包括时间复杂度和空间复杂度,其中,空间复杂度是根据运行完一个程序所需内存资源来确定,而时间复杂度一般是对可执行程序进行运行测试,根据算法执行所耗费的时间资源来确定,一般通过将包含算法的代码编写成可执行程序后运行时所需要的时间资源和内存资源来考量算法复杂度。
在手游性能的分析优化过程中,需要获知原始代码中的算法函数执行所耗费的时间,所耗费的时间即算法函数的运行时间,如果原始代码中的算法函数运行时间消耗大,就需要优化原始代码中的运行时间消耗大的算法函数,现有技术中,通过对原始代码中的函数进行打点操作,打点操作也就是在函数的起始插入代码以记录函数开始运行的时间点,在函数的结尾插入代码以记录函数结束运行的时间点,以此来获取函数的运行时间,这就需要导致开发人员大量的手工打点,这个过程的工作量大,效率低,另外,最后生成的运行时间表中存在大量函数对应的运行时间,造成生成的数据量大,开发人员对函数运行时间进行分析以得到需要优化的函数的效率低。
发明内容
有鉴于此,本申请实施例提供了一种算法复杂度分析的方法和装置、计算设备及计算机可读存储介质,以解决现有技术中存在的技术缺陷。
本申请实施例公开了一种算法复杂度分析的方法,包括:
S201:接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;
S202:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;
S203:计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数;
S204:确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;
S205:判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,将i自增1,执行S203,若否,执行S206;
S206:生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
本申请实施例公开了一种算法复杂度分析的装置,包括:
第一获取模块,被配置为接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;
第一提取模块,被配置为确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;
第二获取模块,被配置为计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数;
第二提取模块,被配置为确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;
判断模块,被配置为判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,将i自增1,执行第二获取模块,若否,执行生成模块;
生成模块,被配置为生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
本申请实施例公开了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现如上所述的算法复杂度分析的方法的步骤。
本申请实施例公开了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如上所述的算法复杂度分析的方法的步骤。
本申请上述实施例中,通过获取所述复杂度超过复杂阈值的第一层函数,提取所述运行时间超过时间阈值的第一层函数,计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,获取所述复杂度超过复杂阈值的第i+1层函数,确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数,一方面,能够大幅减少下一层函数复杂度的计算量以及确定下一层函数运行时间过程中系统资源消耗量,快速地得到原始代码中算法函数的运行时间;另一方面,减少了运行时间表中函数对应的运行时间的数据量,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率。
附图说明
图1是本申请实施例的计算设备的结构示意图;
图2是本申请第一实施例的算法复杂度分析的方法的流程示意图;
图3示出了计算第一层函数对应的复杂度的流程示意图;
图4示出了确定第一层函数对应的运行时间的流程示意图;
图5是本申请第二实施例的算法复杂度分析的方法的示意性流程图;
图6是本申请第三实施例的算法复杂度分析的装置结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在本申请中,提供了一种算法复杂度分析的方法和装置、计算设备及计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图1是示出了根据本说明书一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
其中,处理器120可以执行图2所示方法中的步骤。图2是示出了根据本申请第一实施例的算法复杂度分析的方法的示意性流程图,包括步骤202至步骤214。
步骤202:接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数。
所述原始代码中存在大量的算法函数,算法函数呈树形的层级结构,本步骤通过计算所述原始代码中第一层函数对应的复杂度,对所述第一层函数进行筛选,将复杂度低于复杂阈值的第一层函数筛出,获取所述复杂度超过复杂阈值的第一层函数并在下面步骤中对获取的第一层函数进一步处理。
图3示出了计算第一层函数对应的复杂度的流程示意图,包括步骤302至步骤306。
步骤302:获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值。
所述函数中的调用方式可以包括函数调用、函数的循环调用和函数的递归调用,根据函数中存在的不同调用方式来对应设置分值,比如设置函数调用对应的分值1分,设置函数的循环调用对应的分值为2分,设置函数的递归调用对应的分值为3分。
步骤304:识别所述第一层函数中的每个调用方式。
所述原始代码中的算法函数为树形的层次结构,通过识别每个第一层函数中存在的调用方式,比如,识别一个第一层函数中存在一个函数调用、两个循环调用和一个递归调用。
步骤306:基于所述第一层函数中的每个调用方式和所述评估规则,计算所述原始代码中第一层函数对应的分值,将所述第一层函数对应的分值作为所述第一层函数的复杂度。
比如,在识别第一层函数中存在一个函数调用、两个循环调用和一个递归调用的情况下,根据上述评估规则,则第一层函数中的一个函数调用对应积1分、两个循环调用对应积4分以及一个递归调用积3分,则所述原始代码中第一层函数对应的分值为8分。
所述复杂阈值可以设置为5分,所述原始代码中第一层函数对应的分值8分超过复杂阈值5分,则获取分值为8分的第一层函数。
本步骤获取复杂度超过复杂阈值的第一层函数,这样在下述步骤中无需对每个第一层的函数进行运行时间的确定,只需要对复杂度超过复杂阈值的第一层函数进行运行时间的确定,不仅减少了数据的处理量,而且减少下述步骤生成的函数对应的运行时间的数据量,减少开发人员分析的工作量,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率,加快算法函数性能优化的速度。
步骤204:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数。
本步骤通过提取所述运行时间超过时间阈值的第一层函数,也就是对第一层函数进行进一步筛选,筛选得到所述运行时间超过时间阈值的第一层函数,这样下述步骤中只需要对筛选得到的第一层函数进行处理即可,进一步减少数据的处理量,提高原始代码中算法复杂度分析的效率。
图4示出了确定第一层函数对应的运行时间的流程示意图,包括步骤402至步骤406。
步骤402:对所述原始代码中提取的每个第一层函数进行打点,以获取待编译代码。
对所述原始代码中提取的每个第一层函数进行打点,也就是在所述原始代码中提取的每个第一层函数的起始插入代码以记录第一层函数开始运行的时间点,在第一层函数的结尾插入代码以记录第一层函数结束运行的时间点,上述对所述原始代码中提取的每个第一层函数完成代码的插入即是打点操作,对所述原始代码中提取的每个第一层函数完成打点获得待编译代码,这样下述步骤中启动所述运行程序,所述第一层函数的起始和结尾分别插入的代码记录得到结束运行的时间点与开始运行的时间点,上述结束运行的时间点与开始运行的时间点的差值即为第一层函数的运行时间。
通过获取复杂度超过复杂阈值的第一层函数,这样只需要对复杂度超过复杂阈值的第一层函数进行代码插入,来确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,减少打点操作的工作量。
步骤404:编译所述待编译代码以生成运行程序。
可以利用编译程序将待编译代码翻译成等价的机器语言格式的运行程序。
步骤406:启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间。
通过启动所述运行程序,所述第一层函数的起始和结尾分别插入的代码记录得到结束运行的时间点与开始运行的时间点,上述结束运行的时间点与开始运行的时间点的差值即为第一层函数的运行时间,也就是上述第一层函数执行时所耗费的时间。
步骤206:计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数。
本步骤只需要计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,这样能够进一步减少下述步骤中对第i+1层函数复杂度的计算量。
所述步骤206包括步骤2062至步骤2066。
步骤2062:获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值。
步骤2064:识别提取的所述运行时间超过时间阈值的第i层函数中所述第i+1层函数的调用方式。
步骤2066:基于所述第i+1层函数中的每个调用方式和所述评估规则,计算提取的所述运行时间超过时间阈值的第i层函数中所述第i+1层函数对应的分值,将所述第i+1层函数对应的分值作为所述第i+1层函数的复杂度。
上述步骤2062至步骤2066参见步骤302至步骤306的具体说明,此处不再赘述。
步骤208:确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数。
所述步骤208包括步骤2082至步骤2086。
步骤2082:对获取的所述复杂度超过复杂阈值的第i+1层函数进行打点,以获取待编译代码。
步骤2084:编译所述待编译代码以生成运行程序。
步骤2086:启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间。
上述步骤2082至步骤2086参见步骤402至步骤406的具体说明,此处不再赘述。
步骤210:判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,执行步骤212,若否,执行步骤214。
本步骤是判断提取的所述运行时间超过时间阈值的第i+1层函数是否还存在下层函数,若不存在下层函数,则结束对第i+1函数的打点。
步骤212:将i自增1,执行步骤206。
步骤214:生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
本步骤生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间,可以获得函数的运行时间表,供开发人员分析原始代码中算法函数的时间消耗。
本实施例通过获取所述复杂度超过复杂阈值的第一层函数,提取所述运行时间超过时间阈值的第一层函数,计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,获取所述复杂度超过复杂阈值的第i+1层函数,确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数,一方面,能够大幅减少下一层函数复杂度的计算量以及确定下一层函数运行时间过程中系统资源消耗量,快速地得到原始代码中算法函数的运行时间;另一方面,减少了运行时间表中参考价值低的函数的运行时间的数据,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率。
图5是示出了第二实施例的算法复杂度分析的方法的流程示意图,包括步骤502至步骤516。
步骤502:接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数。
步骤504:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数。
上述步骤502至步骤504与步骤202至步骤204构思相同,参见步骤202至步骤204的具体说明,此处不再赘述。
步骤506:根据获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间以调整时间阈值。
需要说明的是,用于筛选第一层函数的时间阈值一般设置较小,这样能够将运行消耗的时间低的第一层函数进行初步筛选,本步骤可以根据获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间的平均时间,对得到的平均运行时间设置比例,比如可以对上述得到的第一层函数的平均运行时间的20%作为调整的时间阈值,以第一层函数对应的运行时间为依据来调整时间阈值,在确保能够将运行时间消耗高的函数保留并作进一步处理的同时,增加运行时间低于时间阈值的函数的筛出量,不仅大幅降低了数据的处理量,而且减少了运行时间表中函数对应的运行时间的数据量,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率。
步骤508:计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数。
步骤510:确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数。
步骤512:判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,执行步骤514:若否,执行步骤516。
步骤514:将i自增1,执行步骤508。
步骤516:生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
本实施例通过根据获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间以调整时间阈值,以第一层函数对应的运行时间为依据来调整时间阈值,在确保能够将运行时间消耗高的函数保留并作进一步处理的同时,增加运行时间低于时间阈值的函数的筛出量,不仅大幅降低了数据的处理量,而且减少了运行时间表中函数对应的运行时间的数据量,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率。
下面结合具体的场景对本实施例进行示意性说明。
接收原始代码,识别所述原始代码中包含的第一层函数为A、B、C、D、E和F。
获取评估规则,所述评估规则包括函数中的调用方式包括函数调用、函数的循环调用和函数的递归调用,其中函数调用对应的分值1分,函数的循环调用对应的分值为2分,函数的递归调用对应的分值为3分、函数的嵌套调用对应的分值为4分。
识别第一层函数A中存在一个函数调用、两个循环调用、一个函数的嵌套调用和一个递归调用的情况下,根据上述评估规则,则第一层函数A中的一个函数调用对应积1分、两个循环调用对应积4分、一个函数的嵌套调用积4分以及一个递归调用积3分,则所述原始代码中第一层函数A对应的分值为12分。
识别第一层函数B中存在两个循环调用和一个函数的嵌套调用的情况下,根据上述评估规则,则第一层函数B中的两个循环调用对应积4分和一个函数的嵌套调用积4分,则所述原始代码中第一层函数B对应的分值为8分。
识别第一层函数C中存在两个函数调用、两个循环调用和一个函数的嵌套调用的情况下,根据上述评估规则,则第一层函数C中的两个函数调用对应积2分、两个循环调用对应积4分和一个函数的嵌套调用积4分,则所述原始代码中第一层函数C对应的分值为10分。
根据第一层函数D、E和F中存在的函数调用方式,计算第一层函数D、E和F对应的分值分别为6分、7分和2分。
所述复杂阈值可以设置为5分,所述第一层函数A、B、C、D和E分别对应的分值为12分、8分、10分、6分和7分均超过复杂阈值5分,获取所述第一层函数A、B、C、D和E。
对所述原始代码中提取的第一层函数A、B、C、D和E进行打点,以获取待编译代码,编译所述待编译代码以生成运行程序,启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第一层函数A、B、C、D和E对应的运行时间分别为200ms、120ms、80ms、9ms和8ms。
设置时间阈值为10ms,第一层函数A、B和C对应的运行时间分别为200ms、120ms、80ms超过时间阈值10ms,提取所述第一层函数A、B和C。
根据所述第一层函数A、B和C对应的运行时间分别为200ms、120ms、80ms超过时间阈值10ms,可以根据第一层函数对应的平均运行时间设置比例得到时间阈值,将时间阈值调整为40ms。
识别所述第一层函数A中第二层函数a1和a2,所述第一层函数B中第二层函数b1和b2,识别所述第一层函数C中第二层函数c1。
识别第二层函数a1中调用方式存在一个函数调用和三个函数的嵌套调用;根据上述评估规则,所述第二层函数a1中的一个函数调用对应积1分以及三个函数的嵌套调用积12分,则第二层函数a1对应的分值为13分。
识别第二层函数a2中调用方式存在一个函数调用;根据上述评估规则,所述第二层函数a2中的一个函数调用对应积1分,则第二层函数a2对应的分值为1分。
同理,计算所述第二层函数b1和b2对应的分值为8分和2分,计算所述第二层函数c1对应的分值为10分。
第二层函数a1、b1和c1对应的分值分别为13分、8分和10分均超过复杂阈值5,获取所述第二层函数a1、b1和c1。
再对所述第二层函数a1、b1和c1进行打点,以获取待编译代码,编译所述待编译代码以生成运行程序,启动所述运行程序,生成所述第二层函数a1、b1和c1对应的运行时间分别为180ms、80ms和35ms。
第二层函数a1和b1对应的运行时间分别为180ms和80ms超过调整后的时间阈值40ms,提取所述第二层函数a1和b1。
判断提取的所述第二层函数a1和b1中是否存在下层函数,所述第二层函数b1中不存在第三层函数,所述第二层函数a1中存在第三层函数a11和a12,继续计算第三层函数a11和a12的复杂度,在所述第三层函数a11和a12的复杂度超过阈值的情况下,对所述第三层函数a11和a12进行打点后得到待编译程序,确定所述第三层函数a11和a12的运行时间分别为120ms和30ms。
提取超过时间阈值40ms的所述第三层函数a11,在所述第三层函数a11不存在第四层函数的情况下,生成确定上述函数以及上述函数对应的运行时间生成函数运行时间表。
只需获取复杂度超过复杂阈值的第一层函数A、B、C、D和E,无需对第一层函数F进一步处理,并确定第一层函数A、B、C、D和E的运行时间,提取运行时间超过时间阈值的所述第一层函数A、B和C,无需对第一层函数E进一步处理,减少数据的处理量,同理,在对第一层函数A、B和C中第二层函数分别进行处理,能够减少数据的处理量,本场景仅是对第一层函数少量列举,实际上原始代码中函数量是庞大的,通过本申请提供的技术方案能够大幅减少下一层函数复杂度的计算量以及确定下一层函数运行时间过程中系统资源消耗量,快速地得到原始代码中算法函数的运行时间;并且减少了运行时间表中函数对应的运行时间的数据量,提高开发人员对函数运行时间进行分析以得到需要优化的函数的效率。
图6是示出了根据本申请一实施例的算法复杂度分析的装置的结构示意图,包括:
第一获取模块602,被配置为接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;
第一提取模块604,被配置为确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;
第二获取模块606,被配置为计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数;
第二提取模块608,被配置为确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;
判断模块610,被配置为判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,将i自增1,执行第二获取模块606,若否,执行生成模块612;
生成模块612,被配置为生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
所述第一获取模块602被进一步配置为获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值;
识别所述第一层函数中的每个调用方式;
基于所述第一层函数中的每个调用方式和所述评估规则,计算所述原始代码中第一层函数对应的分值,将所述第一层函数对应的分值作为所述第一层函数的复杂度。
所述第一提取模块604被进一步配置为对所述原始代码中提取的每个第一层函数进行打点,以获取待编译代码;
编译所述待编译代码以生成运行程序;
启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间。
所述装置还包括:
调整模块,被配置为根据获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间以调整时间阈值。
所述第二获取模块606被进一步配置为获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值;
识别提取的所述运行时间超过时间阈值的第i层函数中所述第i+1层函数的调用方式;
基于所述第i+1层函数中的每个调用方式和所述评估规则,计算提取的所述运行时间超过时间阈值的第i层函数中所述第i+1层函数对应的分值,将所述第i+1层函数对应的分值作为所述第i+1层函数的复杂度。
所述第二提取模块608,被配置为对获取的所述复杂度超过复杂阈值的第i+1层函数进行打点,以获取待编译代码;编译所述待编译代码以生成运行程序;
启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间。
本申请上述实施例中,通过获取所述复杂度超过复杂阈值的第一层函数,提取所述运行时间超过时间阈值的第一层函数,计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,获取所述复杂度超过复杂阈值的第i+1层函数,确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数,一方面,能够大幅减少下一层函数复杂度的计算量以及确定下一层函数运行时间过程中系统资源消耗量,快速地得到原始代码中算法函数的运行时间;另一方面,减少了运行时间表中函数对应的运行时间的数据量,提高了开发人员对每段函数运行时间进行分析的效率。
本申请一实施例还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现如前所述算法复杂度分析的方法的步骤。
本申请一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述算法复杂度分析的方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述算法复杂度分析的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述算法复杂度分析的方法的技术方案的描述。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为原始代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本申请优选实施例只是用于帮助阐述本申请。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本申请的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本申请。本申请仅受权利要求书及其全部范围和等效物的限制。
Claims (10)
1.一种算法复杂度分析的方法,其特征在于,包括:
S201:接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;
S202:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;
S203:计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数;
S204:确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;
S205:判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,将i自增1,执行S203,若否,执行S206;
S206:生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
2.根据权利要求1所述的方法,其特征在于:计算所述原始代码中每个第一层函数对应的复杂度,包括:
获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值;
识别所述第一层函数中的每个调用方式;
基于所述第一层函数中的每个调用方式和所述评估规则,计算所述原始代码中第一层函数对应的分值,将所述第一层函数对应的分值作为所述第一层函数的复杂度。
3.根据权利要求1所述的方法,其特征在于:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,包括:
对所述原始代码中提取的每个第一层函数进行打点,以获取待编译代码;
编译所述待编译代码以生成运行程序;
启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间。
4.根据权利要求1或2或3所述的方法,其特征在于:确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间之后,还包括:
根据获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间以调整时间阈值。
5.根据权利要求1所述的方法,其特征在于:计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,包括:
获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值;
识别提取的所述运行时间超过时间阈值的第i层函数中所述第i+1层函数的调用方式;
基于所述第i+1层函数中的每个调用方式和所述评估规则,计算提取的所述运行时间超过时间阈值的第i层函数对应的所述第i+1层函数对应的分值,将所述第i+1层函数对应的分值作为所述第i+1层函数的复杂度。
6.根据权利要求1所述的方法,其特征在于:确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,包括:
对获取的所述复杂度超过复杂阈值的第i+1层函数进行打点,以获取待编译代码;
编译所述待编译代码以生成运行程序;
启动所述运行程序,生成获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间。
7.一种算法复杂度分析的装置,其特征在于,包括:
第一获取模块,被配置为接收原始代码,计算所述原始代码中每个第一层函数对应的复杂度,获取所述复杂度超过复杂阈值的第一层函数;
第一提取模块,被配置为确定获取的所述复杂度超过复杂阈值的第一层函数对应的运行时间,提取所述运行时间超过时间阈值的第一层函数;
第二获取模块,被配置为计算提取的所述运行时间超过时间阈值的第i层函数中第i+1层函数对应的复杂度,其中i≥1,获取所述复杂度超过复杂阈值的第i+1层函数;
第二提取模块,被配置为确定获取的所述复杂度超过复杂阈值的第i+1层函数对应的运行时间,提取所述运行时间超过时间阈值的第i+1层函数;
判断模块,被配置为判断提取的所述运行时间超过时间阈值的第i+1层函数中是否存在第i+2层函数,若是,将i自增1,执行第二获取模块,若否,执行生成模块;
生成模块,被配置为生成获取的所述复杂度超过复杂阈值的第一层函数至第i+1层函数对应的运行时间。
8.根据权利要求7所述的装置,其特征在于:所述第一获取模块602被进一步配置为获取评估规则,所述评估规则包括函数中的调用方式以及调用方式对应的分值;
识别所述第一层函数中的每个调用方式;
基于所述第一层函数中的每个调用方式和所述评估规则,计算所述原始代码中第一层函数对应的分值,将所述第一层函数对应的分值作为所述第一层函数的复杂度。
9.一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,其特征在于,所述处理器执行所述指令时实现权利要求1-6任意一项所述方法的步骤。
10.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-6任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911376280.5A CN111124424B (zh) | 2019-12-27 | 2019-12-27 | 一种算法复杂度分析的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911376280.5A CN111124424B (zh) | 2019-12-27 | 2019-12-27 | 一种算法复杂度分析的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111124424A true CN111124424A (zh) | 2020-05-08 |
CN111124424B CN111124424B (zh) | 2023-09-19 |
Family
ID=70503896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911376280.5A Active CN111124424B (zh) | 2019-12-27 | 2019-12-27 | 一种算法复杂度分析的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124424B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050091257A1 (en) * | 2003-10-28 | 2005-04-28 | International Business Machines Corporation | Algorithm for sorting bit sequences in linear complexity |
US20110107316A1 (en) * | 2009-11-04 | 2011-05-05 | International Business Machines Corporation | Algorithm complexity identification |
US20110167414A1 (en) * | 2010-01-04 | 2011-07-07 | Apple Inc. | System and method for obfuscation by common function and common function prototype |
US20110191760A1 (en) * | 2010-01-29 | 2011-08-04 | Nathaniel Guy | Method and apparatus for enhancing comprehension of code time complexity and flow |
CN104239055A (zh) * | 2014-09-15 | 2014-12-24 | 大连楼兰科技股份有限公司 | 检测软件代码复杂度的方法 |
US20170091459A1 (en) * | 2015-09-24 | 2017-03-30 | International Business Machines Corporation | Machine Learning Statistical Methods Estimating Software System's Security Analysis Assessment or Audit Effort, Cost and Processing Decisions |
CN108021370A (zh) * | 2017-12-26 | 2018-05-11 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN108153530A (zh) * | 2017-12-26 | 2018-06-12 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN108182120A (zh) * | 2017-12-08 | 2018-06-19 | 广州视源电子科技股份有限公司 | 接口调用方法和系统、存储介质和计算机设备 |
CN110532193A (zh) * | 2019-09-09 | 2019-12-03 | 珠海金山网络游戏科技有限公司 | 一种性能分析方法、装置、计算设备及存储介质 |
-
2019
- 2019-12-27 CN CN201911376280.5A patent/CN111124424B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050091257A1 (en) * | 2003-10-28 | 2005-04-28 | International Business Machines Corporation | Algorithm for sorting bit sequences in linear complexity |
US20110107316A1 (en) * | 2009-11-04 | 2011-05-05 | International Business Machines Corporation | Algorithm complexity identification |
US20110167414A1 (en) * | 2010-01-04 | 2011-07-07 | Apple Inc. | System and method for obfuscation by common function and common function prototype |
US20110191760A1 (en) * | 2010-01-29 | 2011-08-04 | Nathaniel Guy | Method and apparatus for enhancing comprehension of code time complexity and flow |
CN104239055A (zh) * | 2014-09-15 | 2014-12-24 | 大连楼兰科技股份有限公司 | 检测软件代码复杂度的方法 |
US20170091459A1 (en) * | 2015-09-24 | 2017-03-30 | International Business Machines Corporation | Machine Learning Statistical Methods Estimating Software System's Security Analysis Assessment or Audit Effort, Cost and Processing Decisions |
CN108182120A (zh) * | 2017-12-08 | 2018-06-19 | 广州视源电子科技股份有限公司 | 接口调用方法和系统、存储介质和计算机设备 |
CN108021370A (zh) * | 2017-12-26 | 2018-05-11 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN108153530A (zh) * | 2017-12-26 | 2018-06-12 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN110532193A (zh) * | 2019-09-09 | 2019-12-03 | 珠海金山网络游戏科技有限公司 | 一种性能分析方法、装置、计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111124424B (zh) | 2023-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11144817B2 (en) | Device and method for determining convolutional neural network model for database | |
US11915104B2 (en) | Normalizing text attributes for machine learning models | |
CN110941424B (zh) | 编译参数优化方法、装置及电子设备 | |
US20230259712A1 (en) | Sound effect adding method and apparatus, storage medium, and electronic device | |
CN117992598B (zh) | 基于大模型的需求响应方法、装置、介质及设备 | |
CN113312166B (zh) | 资源处理方法以及装置 | |
CN112948090B (zh) | 应用于网络业务处理的大数据分析整理方法及服务器 | |
CN113946363A (zh) | 业务数据的执行配置方法、装置、计算机设备及存储介质 | |
CN116911288B (zh) | 一种基于自然语言处理技术的离散文本识别方法 | |
CN111124424B (zh) | 一种算法复杂度分析的方法和装置 | |
CN109241249B (zh) | 一种确定突发问题的方法及装置 | |
CN112905457B (zh) | 软件测试方法及装置 | |
CN114065197A (zh) | 调用序列生成方法、装置、电子设备、存储介质及产品 | |
CN112506622A (zh) | 面向云手机的gpu计算性能的预测方法及装置 | |
CN113031952B (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
CN113988316A (zh) | 对机器学习模型训练的方法和装置 | |
CN112905792A (zh) | 基于非文本场景的文本聚类方法、装置、设备及存储介质 | |
CN105653552B (zh) | 一种结构化文档处理方法、装置及设备 | |
CN114186043B (zh) | 预训练方法、装置、设备和存储介质 | |
EP4068141B1 (en) | Method and system to enable print functionality in high-level synthesis (hls) design platforms | |
CN110348684B (zh) | 服务调用风险模型生成方法、预测方法及各自装置 | |
CN113297306B (zh) | 数据处理方法及装置 | |
CN112579780B (zh) | 基于Single-pass的聚类方法、系统、装置、存储介质 | |
CN113780369A (zh) | 基于文本数据确定目标用户的方法、装置和计算机设备 | |
CN116738257A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 519000 Room 102, 202, 302 and 402, No. 325, Qiandao Ring Road, Tangjiawan Town, high tech Zone, Zhuhai City, Guangdong Province, Room 102 and 202, No. 327 and Room 302, No. 329 Applicant after: Zhuhai Jinshan Digital Network Technology Co.,Ltd. Address before: 519000 Room 102, 202, 302 and 402, No. 325, Qiandao Ring Road, Tangjiawan Town, high tech Zone, Zhuhai City, Guangdong Province, Room 102 and 202, No. 327 and Room 302, No. 329 Applicant before: ZHUHAI KINGSOFT ONLINE GAME TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |