一种组合电子券选取方法和装置与流程

文档序号:26142147发布日期:2021-08-03 14:26阅读:93来源:国知局
一种组合电子券选取方法和装置与流程

本发明涉及计算机技术领域,特别涉及人工智能技术领域,尤其涉及一种组合电子券选取方法和装置。



背景技术:

目前,向用户分配电子券是互联网时代下的企业拓客、获客、黏客的重要手段。商户的营销形式的层出不穷,通过推出多种优惠活动,使得用户可以叠加使用电子券进行消费,从而促进社会经济活跃。因此,在用户拥有多张电子券的情况下,如何快速自动选择一组最优券进行抵扣支付成为当前亟待解决的问题。相关技术中,一般通过枚举法,列出多张电子券之间的所有组合,将电子券数量最少的一组电子券确定为最优组合,但上述方式仅适用于电子券数量较少的情况,若用户名下存在大量电子券,则其组合数量成指数型增长,则计算过程中时间消耗与内存的消耗也成指数型增长,导致时间复杂度和空间复杂度均过高,电子券的选取效率较低。



技术实现要素:

本发明的一个目的在于提供一种组合电子券选取方法,能够极大降低时间复杂度和空间复杂度,从而提高电子券的选取效率。本发明的另一个目的在于提供一种组合电子券选取装置。本发明的再一个目的在于提供一种计算机可读介质。本发明的还一个目的在于提供一种计算机设备。

为了达到以上目的,本发明一方面公开了一种组合电子券选取方法,包括:

根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;

根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息。

优选地,根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单,包括:

根据订单总金额和待选电子券的电子券面额,生成当前子订单金额;

根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单。

优选地,根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单,包括:

根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,其中,拆分判定处理包括:

对待选电子券的电子券面额对应的待选电子券数量进行减一处理;

判断当前子订单金额是否小于待选电子券的最小电子券面额;

若当前子订单金额小于待选电子券的最小电子券面额,将当前子订单确定为终极子订单;

若当前子订单金额大于或等于待选电子券的最小电子券面额,根据剩余的待选电子券的电子券面额、减一处理后的待选电子券数量和当前子订单金额,生成下一级子订单金额;

将下一级子订单金额确定为当前子订单金额,并重复根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理。

优选地,根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息,包括:

根据终极子订单所使用的最少券数和订单总金额,统计出组合电子券的选取数量;

查询出组合电子券中每张电子券的电子券面额;

根据组合电子券的选取数量和组合电子券中每张电子券的电子券面额,生成组合电子券选取信息。

优选地,根据终极子订单所使用的最少券数和订单总金额,统计出组合电子券的选取数量,包括:

对终极子订单所使用的最少券数进行加一处理,生成当前子订单所使用的最少券数;

判断当前子订单对应的当前子订单金额是否为订单总金额;

若当前子订单对应的当前子订单金额为订单总金额,将加一处理后的券数确定为组合电子券的选取数量。

优选地,方法还包括:

若当前子订单对应的当前子订单金额不是订单总金额,对当前子订单所使用的最少券数进行加一处理,生成上一级子订单所使用的最少券数;

将上一级子订单确定为当前子订单,并继续执行判断当前子订单对应的当前子订单金额是否为订单总金额的步骤。

本发明还公开了一种组合电子券选取装置,包括:

拆分单元,用于根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;

生成单元,用于根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息。

优选地,拆分单元,具体用于根据订单总金额和待选电子券的电子券面额,生成当前子订单金额;根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单。

本发明还公开了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法。

本发明还公开了一种计算机设备,包括存储器和处理器,所述存储器用于存储包括程序指令的信息,所述处理器用于控制程序指令的执行,所述处理器执行所述程序时实现如上所述方法。

本发明根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息,能够极大降低时间复杂度和空间复杂度,从而提高电子券的选取效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种用户使用组合电子券消费场景的流程图;

图2为本发明实施例提供的一种自顶向下的树状图的结构示意图;

图3为本发明实施例提供的一种组合电子券选取方法的流程图;

图4为本发明实施例提供的又一种组合电子券选取方法的流程图;

图5为本发明实施例提供的一种基于动态规划算法的组合电子券的券数与订单金额的对应关系的示意图;

图6为本发明实施例提供的一种组合电子券选取装置的结构示意图;

图7为本发明实施例提供的一种计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,本申请公开的一种组合电子券选取方法和装置可用于人工智能技术领域,也可用于除人工智能技术领域之外的任意领域,本申请公开的一种组合电子券选取方法和装置的应用领域不做限定。

为了便于理解本申请提供的技术方案,下面先对本申请技术方案的相关内容进行说明。图1为本发明实施例提供的一种用户使用组合电子券消费场景的流程图,如图1所示,在用户想要使用名下已有的多张电子券叠加消费的场景下,生成消费订单后,首先需要用户通过用户终端向服务器发送支付请求,支付请求中包括用户身份标识号(id),服务器响应于支付请求,通过用户id查询用户名下是否有可用电子券,若用户名下没有可用电子券,则提醒用户当前无可用电子券,请使用其他支付方式支付;若用户名下有可用电子券,获取可用电子券的电子券面额和每张电子券面额的数量,并选取出电子券的最优组合;将最优组合的组合电子券进行消费抵扣,若仍有剩余待支付金额,提醒用户采取其他支付方式支付剩余待支付金额;当用户支付完成,服务器更新该消费订单的订单状态为已完成。其中,电子券可以是多种形式的抵扣券,例如:代金券或打折券。其他支付方式包括但不限于现金支付或移动支付。

在上述消费场景中,最重要的是如何选取出电子券的最优组合,在传统的选取方法中,服务器会采取枚举法,即:暴力递归算法,将所有电子券进行排列组合,列出所有组合,从所有组合中选取出最优组合的组合电子券。下面对枚举法的选择最优组合的组合电子券的方式进行举例说明:

当前生成的消费订单的总金额是110元,该用户名下有可用电子券且可用电子券的电子券面额为10元、20元和50元三种,10元的电子券的数量为12张,20元电子券的数量为6张,50元的电子券的数量为3张,即:每种电子券面额的电子券的数量均是充足的。通过枚举法列出如下所有组合:

a:10+10+10+10+10+10+10+10+10+10+10

b:10+10+10+10+10+10+10+10+10+20

c:10+10+10+10+10+10+10+20+20

d:10+10+10+10+10+20+20+20

e:10+10+10+20+20+20+20

f:10+20+20+20+20+20

g:10+20+20+50+10

h:10+50+50

i:20+10+10+10+10+10+10+10+10+10

j:20+20+10+10+10+10+10+10+10

k:20+20+20+10+10+10+10+10

l:20+20+20+20+10+10+10

m:20+20+20+20+20+10

n:20+50+20+20

o:20+50+10+10+10+10

p:20+50+20+10+10

q:50+10+10+10+10+10+10

r:50+10+10+10+10+20

s:50+10+10+20+20

t:50+20+20+20

u:50+20+10+10+10+10

v:50+20+20+10+10

w:50+20+20+20

x:50+50+10

如上列出的所有组合可以看出,在枚举法中会存在重复计算,例如:h:10+50+50和x:50+50+10,电子券越多,电子券面额越复杂,枚举法存在的重复计算则会越多,大量重复计算会导致极大的内存消耗和时间消耗,导致选取过程的时间复杂度与空间复杂度过高,甚至导致交易超时,无法选取到最优组合的组合电子券,选取效率极低。

为了更直观了解到枚举法选取电子券的选取过程,本发明实施例将枚举法选取电子券的选取过程通过树状图进行表示,图2为本发明实施例提供的一种自顶向下的树状图的结构示意图,如图2所示,消费订单的总金额是110元,当使用10元电子券面额的电子券抵扣后,二级子订单的金额为100元;当使用20元电子券面额的电子券抵扣后,二级子订单的金额为90元;当使用50元电子券面额的电子券抵扣后,二级子订单的金额为60元。再对二级子订单按照多种电子券面额进行抵扣,对于金额为100元的子订单,当使用10元电子券面额的电子券抵扣后,三级子订单的金额为90元;当使用20元电子券面额的电子券抵扣后,三级子订单的金额为80元;当使用50元电子券面额的电子券抵扣后,三级子订单的金额为50元。对于金额为60元的子订单,当使用10元电子券面额的电子券抵扣后,三级子订单的金额为50元;当使用20元电子券面额的电子券抵扣后,三级子订单的金额为40元;当使用50元电子券面额的电子券抵扣后,三级子订单的金额为10元。再对三级子订单按照多种电子券面额进行抵扣,对于金额为50元的子订单,当使用10元电子券面额的电子券抵扣后,四级子订单的金额为40元;当使用20元电子券面额的电子券抵扣后,四级子订单的金额为30元;当使用50元电子券面额的电子券抵扣后,四级子订单的金额为0元。对于金额为40元的子订单,当使用10元电子券面额的电子券抵扣后,四级子订单的金额为30元;当使用20元电子券面额的电子券抵扣后,四级子订单的金额为20元;当使用50元电子券面额的电子券抵扣后,四级子订单的金额为-10元。由图2可见,若继续按照电子券面额向下分解当前订单的金额,存在90元金额的订单和50元金额的订单两种重复计算。因此,通过上述自顶向下的树状图,可以推导出:每个订单金额为选取的电子券面额与下一级子订单金额之和,例如:订单金额为110元,电子券面额为10元、20元和50元,则订单金额的最小组合数为一张电子券面额(10元、20元或50元)与下一级子订单金额(100元、90元或60元)中最小组合数之和。综上所述,得出推导公式:

dp[order]=1+min(dp[order-favevalue])

其中,dp[order]为组合电子券的选取数量,min(dp[order-favevalue])为订单金额减去某种电子券面额后的下一级子订单的最小组合数,1为已选取的一张电子券且该电子券对应于某种电子券面额。

本发明实施例基于动态规划算法,提供了一种组合电子券选取方法。下面以组合电子券选取装置作为执行主体为例,说明本发明实施例提供的组合电子券选取方法的实现过程。可理解的是,本发明实施例提供的组合电子券选取方法的执行主体包括但不限于组合电子券选取装置。

图3为本发明实施例提供的一种组合电子券选取方法的流程图,如图3所示,该方法包括:

步骤101、根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订。

具体地,根据订单总金额和待选电子券的电子券面额,生成当前子订单金额;根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单。

步骤102、根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息。

具体地,根据终极子订单所使用的最少券数和订单总金额,统计出组合电子券的选取数量;查询出组合电子券中每张电子券的电子券面额;根据组合电子券的选取数量和组合电子券中每张电子券的电子券面额,生成组合电子券选取信息。

本发明实施例提供的技术方案中,根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息,能够极大降低时间复杂度和空间复杂度,从而提高电子券的选取效率。

图4为本发明实施例提供的又一种组合电子券选取方法的流程图,如图4所示,该方法包括:

步骤201、获取待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额。

本发明实施例中,各步骤由组合电子券选取装置执行。

本发明实施例中,当用户需要对生成的订单进行消费支付时,需要通过用户终端向终端服务器发送支付请求,支付请求包括用户id;终端服务器响应于支付请求,触发组合电子券选取装置根据用户id查询出用户名下的所有待选电子券的相关信息,待选电子券的相关信息包括电子券面额和每张电子券面额对应的待选电子券数量。

步骤202、根据订单总金额和待选电子券的电子券面额,生成当前子订单金额。

具体的,将订单总金额减去选取的一张待选电子券的电子券面额,得到当前子订单金额。

本发明实施例中,以订单总金额为110元,待选电子券的电子券面额包括10元、20元和50元为例,若选取的一张待选电子券的电子券面额为10元,则生成当前子订单金额为100元;若选取的一张待选电子券的电子券面额为20元,则生成当前子订单金额为90元;若选取的一张待选电子券的电子券面额为50元,则生成当前子订单金额为60元。

步骤203、根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单。

本发明实施例中,步骤203具体包括:

步骤2031、对待选电子券的电子券面额对应的待选电子券数量进行减一处理。

本发明实施例中,由于步骤202中已经选取了一张待选电子券,则对该选取的电子券的电子券面额对应的待选电子券数量进行减一处理。例如:若选取的电子券为10元电子券面额的电子券,且10元电子券面额的待选电子券的待选电子券数量为12张,则对待选电子券数量进行减一处理,即:10元电子券面额的待选电子券的待选电子券数量为11张。

步骤2032、判断当前子订单金额是否小于待选电子券的最小电子券面额,若是,执行步骤2033;若否,执行步骤2034。

本发明实施例中,若当前子订单金额为20元,待选电子券的电子券面额为10元、20元和50元,则待选电子券的最小电子券面额为10元,当前子订单金额大于最小电子券面额,执行步骤2034;若待选电子券的面额只有50元,即:待选电子券的最小电子券面额为50元,当前子订单金额小于最小电子券面额,继续执行步骤2033。

本发明实施例中,若当前子订单金额小于待选电子券的最小电子券面额,表明待选电子券中不存在可以继续选取的电子券,继续执行步骤2033;若当前子订单金额大于或等于待选电子券的最小电子券面额,表明待选电子券中存在可以继续选取的电子券,继续执行步骤2034。

步骤2033、将当前子订单确定为终极子订单,继续执行步骤204。

本发明实施例中,若待选电子券中不存在可以继续选取的电子券,将当前子订单确定为终极子订单,继续执行步骤204。

步骤2034、根据剩余的待选电子券的电子券面额、减一处理后的待选电子券数量和当前子订单金额,生成下一级子订单金额。

本发明实施例中,若待选电子券中存在可以继续选取的电子券,根据剩余的待选电子券的电子券面额、减一处理后的待选电子券数量和当前子订单金额,生成下一级子订单金额。具体地,判断减一处理后的待选电子券数量是否为零,若减一处理后的待选电子券数量不为零,表明该电子券面额下的待选电子券数量充足,将当前子订单金额减去选取的电子券面额,生成下一级子订单金额;若减一处理后的待选电子券数量为零,表明该电子券面额下的待选电子券数量不足,选取其他电子券面额的电子券,并生成下一级子订单金额。

步骤2035、将下一级子订单金额确定为当前子订单金额,继续执行步骤2031。

本发明实施例中,将下一级子订单金额确定为当前子订单金额,继续判断当前子订单金额是否可以按照电子券面额进行拆分,直到当前子订单金额无法继续拆分。

步骤204、根据终极子订单所使用的最少券数和订单总金额,统计出组合电子券的选取数量。

本发明实施例中,步骤204具体包括:

步骤2041、对终极子订单所使用的最少券数进行加一处理,生成当前子订单所使用的最少券数。

本发明实施例中,存储器中预先存储有终极子订单所使用的最少券数,即:终极子订单所使用的最少券数可以从存储器中获取。具体地,根据终极子订单的订单金额和电子券面额按照公式dp[order]=1+min(dp[order-favevalue])进行计算,生成终极子订单所使用的最少券数,其中,dp[order]为当前子订单所使用的最少券数,min(dp[order-favevalue])为当前子订单金额减去某种电子券面额后的下一级子订单的最少券数,1为已选取的一张电子券且该电子券对应于某种电子券面额。

以电子券面额为10元、20元和50元为例,若终极子订单的订单金额为0元,则需要0张券,即:dp[0]=0。

若终极子订单的订单金额为10元,则选取一张10元的电子券,即:

dp[10]=1+min(dp[10-10])=1+min(dp[0])=1,则终极子订单所使用的最少券数为1张。

若终极子订单的订单金额为20元,则选取一张10元的电子券或一张20元的电子券,即:

dp[20]=1+min(dp[20-20],dp[20-10])=1+min(dp[0],dp[10])=1+min(0,1)=1+0=1,则终极子订单所使用的最少券数为1张。

若终极子订单的订单金额为30元,则选取一张10元的电子券或一张20元的电子券,即:

dp[30]=1+min(dp[30-20],dp[30-10])=1+min(dp[10],dp[20])=1+min(1,1)=1+1=2,则终极子订单所使用的最少券数为2张。

若终极子订单的订单金额为40元,则选取一张10元的电子券或一张20元的电子券,即:

dp[40]=1+min(dp[40-20],dp[40-10])=1+min(dp[20],dp[30])=1+min(1,2)=1+1=2,则终极子订单所使用的最少券数为2张。

若终极子订单的订单金额为50元,则选取一张10元的电子券或一张20元的电子券或一张50元的电子券,即:

dp[50]=1+min(dp[50-50],dp[50-20],dp[50-10])=1+min(dp[0],dp[30],dp[40])=1+min(0,2,2)=1+0=1,则终极子订单所使用的最少券数为1张。

步骤2042、判断当前子订单对应的当前子订单金额是否为订单总金额,若是,执行步骤2043;若否,执行步骤2044。

本发明实施例中,若当前子订单对应的当前子订单金额为订单总金额,表明当前子订单为订单总金额对应的订单,继续执行步骤2043;若当前子订单对应的当前子订单金额不是订单总金额,表明当前子订单还存在上一级子订单,继续执行步骤2044。

步骤2043、将加一处理后的券数确定为组合电子券的选取数量,继续执行步骤205。

本发明实施例中,若当前子订单为订单总金额对应的订单,将加一处理后的券数确定为组合电子券的选取数量,继续执行步骤205。

步骤2044、对当前子订单所使用的最少券数进行加一处理,生成上一级子订单所使用的最少券数。

本发明实施例中,若当前子订单还存在上一级子订单,对当前子订单所使用的最少券数进行加一处理,得到上一级子订单所使用的最少券数。

步骤2045、将上一级子订单确定为当前子订单,并继续执行步骤2042。

本发明实施例中,将上一级子订单确定为当前子订单,继续对当前子订单是否为订单总金额对应的订单进行判断,最终统计出组合电子券的选取数量。

步骤205、查询出组合电子券中每张电子券的电子券面额。

本发明实施例中,选取电子券的过程中,组合电子券选取装置将选取的电子券的电子券面额进行记录,以便统计组合电子券中每张电子券的电子券面额。

步骤206、根据组合电子券的选取数量和组合电子券中每张电子券的电子券面额,生成组合电子券选取信息。

本发明实施例中,将组合电子券中每张电子券的电子券面额和每种电子券面额对应的选取数量进行汇总,生成组合电子券选取信息。例如:组合电子券选取信息包括2张50元电子券和1张10元电子券。

下面用一个具体的例子对组合电子券选取进行详细说明:

当组合电子券选取装置查询到用户名下有12张10元的电子券、6张20元电子券和3张50元的电子券,订单总金额为110元。按照电子券面额对订单总金额对应的订单进行拆分,直至拆分到终极子订单,拆分过程如下所示:

dp[110]=1+min(dp[100],dp[90],dp[60]);

dp[100]=1+min(dp[90],dp[80],dp[50]);

dp[90]=1+min(dp[80],dp[70],dp[40]);

dp[80]=1+min(dp[70],dp[60],dp[30]);

dp[70]=1+min(dp[60],dp[50],dp[20]);

dp[60]=1+min(dp[50],dp[40],dp[10]);

从存储器中获取到终极子订单所使用的最少券数dp[10]=1,dp[20]=1,dp[30]=2,dp[40]=2,dp[50]=1,则将终极子订单所使用的最少券数从下到上依次代入上式进行计算,得到:

dp[60]=1+min(dp[50],dp[40],dp[10])=1+min(1,2,1)=1+1=2;

dp[70]=1+min(dp[60],dp[50],dp[20])=1+min(2,1,1)=1+1=2;

dp[80]=1+min(dp[70],dp[60],dp[30])=1+min(2,2,2)=1+2=3;

dp[90]=1+min(dp[80],dp[70],dp[40])=1+min(3,2,2)=1+2=3;

dp[100]=1+min(dp[90],dp[80],dp[50])=1+min(3,3,1)=1+1=2;

dp[110]=1+min(dp[100],dp[90],dp[60])=1+min(2,3,2)=1+2=3,即:订单总金额为110的订单的组合电子券的券数为3张,分别是2张50元电子券和1张10元电子券

图5为本发明实施例提供的一种基于动态规划算法的组合电子券的券数与订单金额的对应关系的示意图,如图5所示,订单金额为0元,对应的组合电子券的券数为0张;订单金额为10元,对应的组合电子券的券数为1张;订单金额为20元,对应的组合电子券的券数为1张;订单金额为30元,对应的组合电子券的券数为2张;订单金额为40元,对应的组合电子券的券数为2张;订单金额为50元,对应的组合电子券的券数为1张;订单金额为60元,对应的组合电子券的券数为2张;订单金额为70元,对应的组合电子券的券数为2张;订单金额为80元,对应的组合电子券的券数为3张;订单金额为90元,对应的组合电子券的券数为3张;订单金额为100元,对应的组合电子券的券数为2张;订单金额为110元,对应的组合电子券的券数为3张。

下面用另一个具体的例子对组合电子券选取进行详细说明:

当组合电子券选取装置查询到用户名下有15张10元的电子券和1张50元的电子券,订单总金额为110元。按照电子券面额对订单总金额对应的订单进行拆分,直至拆分到终极子订单,由于50元的电子券只有1张,因此当订单总金额大于50元时,涉及使用到50元的电子券的基础发生改变。即:50元的电子券的剩余数量为0,因此,dp[50]’=1+min(dp[50-10])=1+4=5,拆分过程如下所示:

dp[110]=1+min(dp[100],dp[60]);

dp[100]=1+min(dp[90]);

dp[90]=1+min(dp[80]);

dp[80]=1+min(dp[70]);

dp[70]=1+min(dp[60]);

dp[60]=1+min(dp[50]’);

从存储器中获取到终极子订单所使用的最少券数dp[0]=0,dp[10]=1,dp[20]=2,dp[30]=3,dp[40]=4,dp[50]=1。将终极子订单所使用的最少券数从下到上依次代入上式进行计算,得到:

dp[60]=1+min(dp[50]’)=1+min(5)=1+5=6;

dp[70]=1+min(dp[60])=1+min(6)=1+6=7;

dp[80]=1+min(dp[70])=1+min(7)=1+7=8;

dp[90]=1+min(dp[80])=1+min(8)=1+8=9;

dp[100]=1+min(dp[90])=1+min(9)=1+9=10;

dp[110]=1+min(dp[100],dp[60])=1+min(10,6)=1+6=7,即:订单总金额为110的订单的组合电子券的券数为7张,分别是1张50元电子券和6张10元电子券。

综上所述,通过动态规划算法,从下到上依次获取获取每一级订单所使用的最少券数,最终获取到消费的订单所使用的最少券数,从dp[0]到dp[110],只需要计算11次即可,动态规划算法为线性推演,相较传统的枚举法而言,时间复杂度和空间复杂度极低。

本发明实施例提供的组合电子券选取方法的技术方案中,根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息,能够极大降低时间复杂度和空间复杂度,从而提高电子券的选取效率。

图6为本发明实施例提供的一种组合电子券选取装置的结构示意图,该装置用于执行上述组合电子券选取方法,如图6所示,该装置包括:拆分单元11和生成单元12。

拆分单元11用于用于根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单。

生成单元12用于根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息。

本发明实施例中,拆分单元11具体用于根据订单总金额和待选电子券的电子券面额,生成当前子订单金额;根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理,生成不同的电子券面额对应的终极子订单。

本发明实施例中,拆分单元11具体还用于对待选电子券的电子券面额对应的待选电子券数量进行减一处理;判断当前子订单金额是否小于待选电子券的最小电子券面额;若当前子订单金额小于待选电子券的最小电子券面额,将当前子订单确定为终极子订单;若当前子订单金额大于或等于待选电子券的最小电子券面额,根据剩余的待选电子券的电子券面额、减一处理后的待选电子券数量和当前子订单金额,生成下一级子订单金额;将下一级子订单金额确定为当前子订单金额,并继续执行对待选电子券的电子券面额对应的待选电子券数量进行减一处理的步骤。

本发明实施例中,生成单元12具体用于根据终极子订单所使用的最少券数和订单总金额,统计出组合电子券的选取数量;查询出组合电子券中每张电子券的电子券面额;根据组合电子券的选取数量和组合电子券中每张电子券的电子券面额,生成组合电子券选取信息。

本发明实施例中,生成单元12具体还用于对终极子订单所使用的最少券数进行加一处理,生成当前子订单所使用的最少券数;判断当前子订单对应的当前子订单金额是否为订单总金额;若当前子订单对应的当前子订单金额为订单总金额,将加一处理后的券数确定为组合电子券的选取数量。

本发明实施例中,生成单元12还具体用于若当前子订单对应的当前子订单金额不是订单总金额,对当前子订单所使用的最少券数进行加一处理,生成上一级子订单所使用的最少券数;将上一级子订单确定为当前子订单,并重复根据当前子订单金额、待选电子券的电子券面额和每张电子券面额对应的待选电子券数量,对当前子订单金额对应的当前子订单进行拆分判定处理。

本发明实施例的方案中,根据获取的待选电子券的电子券面额、每张电子券面额对应的待选电子券数量和订单总金额,将订单总金额对应的订单拆分为不同的电子券面额对应的终极子订单;根据存储的不同的电子券面额对应的终极子订单所使用的最少券数和订单总金额,生成组合电子券选取信息,能够极大降低时间复杂度和空间复杂度,从而提高电子券的选取效率。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机设备,具体的,计算机设备例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

本发明实施例提供了一种计算机设备,包括存储器和处理器,存储器用于存储包括程序指令的信息,处理器用于控制程序指令的执行,程序指令被处理器加载并执行时实现上述组合电子券选取方法的实施例的各步骤,具体描述可参见上述组合电子券选取方法的实施例。

下面参考图7,其示出了适于用来实现本申请实施例的计算机设备600的结构示意图。

如图7所示,计算机设备600包括中央处理单元(cpu)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram))603中的程序而执行各种适当的工作和处理。在ram603中,还存储有系统600操作所需的各种程序和数据。cpu601、rom602、以及ram603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。

以下部件连接至i/o接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶反馈器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡,调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口606。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装如存储部分608。

特别地,根据本发明的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包括用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1