CN108492437A - 抽奖数据处理方法及装置 - Google Patents
抽奖数据处理方法及装置 Download PDFInfo
- Publication number
- CN108492437A CN108492437A CN201810210600.9A CN201810210600A CN108492437A CN 108492437 A CN108492437 A CN 108492437A CN 201810210600 A CN201810210600 A CN 201810210600A CN 108492437 A CN108492437 A CN 108492437A
- Authority
- CN
- China
- Prior art keywords
- present
- target user
- prize
- quantity section
- normal number
- 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
Classifications
-
- G—PHYSICS
- G07—CHECKING-DEVICES
- G07C—TIME OR ATTENDANCE REGISTERS; REGISTERING OR INDICATING THE WORKING OF MACHINES; GENERATING RANDOM NUMBERS; VOTING OR LOTTERY APPARATUS; ARRANGEMENTS, SYSTEMS OR APPARATUS FOR CHECKING NOT PROVIDED FOR ELSEWHERE
- G07C15/00—Generating random numbers; Lottery apparatus
- G07C15/006—Generating random numbers; Lottery apparatus electronically
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Time Recorders, Dirve Recorders, Access Control (AREA)
Abstract
本申请提供一种抽奖数据处理方法及装置,在到达抽奖活动的抽奖时长时,获取参与抽奖活动的各目标用户在该抽奖活动中送出的指定礼物的数量,并根据各个目标数量的大小对各目标用户进行排序,依照得到的排序结果依次计算各目标用户中的每一个对应的礼物数量区间;计算获取到的各个数量的和,将该和作为预设变量的初始值;每确定一个中奖用户,将预设变量的值更新为其当前值与该中奖用户的礼物数量区间的区间长度之差;针对待确定的中奖名额,确定小于预设变量的当前值的随机正数,当该随机正数不属于中奖用户的礼物数量区间时,在未中奖用户的礼物数量区间中确定该随机正数所属的礼物数量区间,并将该区间对应的目标用户作为中奖用户。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种抽奖数据处理方法及装置。
背景技术
在直播过程中,主播可能通过直播平台会发起抽奖活动,例如,在指定的时间内,从给主播赠送指定礼物的用户中抽取一定数量的用户赠送奖品。目前尚未有高效可靠的方法能在直播平台上实现此种抽奖。
申请内容
有鉴于此,本申请的目的包括提供一种抽奖数据处理方法及装置,以改善上述问题。
为了达到上述目的,本申请实施例提供一种抽奖数据处理方法,应用于提供直播平台的服务器,该方法包括:
当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照预设顺序依次计算所述各目标用户中每个目标用户的礼物数量区间;
计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值;
每确定一个中奖名额对应的中奖用户,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差;
针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数;
当所述各目标用户中存在中奖用户时,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间;
若不存在该随机正数所属的礼物数量区间,则在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
可选地,上述的方法还包括:
当所述各目标用户中不存在中奖用户时,在所述各目标用户所对应的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
可选地,上述的方法还包括:
若所述中奖用户所对应的礼物数量区间中存在该随机正数所属的礼物数量区间,则将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间;
若存在,则重新执行将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数的步骤。
可选地,当检测到在所述直播平台开启抽奖活动的操作指令时,上述的方法还包括:
针对参与所述抽奖活动的每个目标用户,统计并记录该目标用户在所述抽奖活动开启后送出的指定礼物的数量。
可选地,在上述的方法中,记录该目标用户在所述抽奖活动开启后送出的指定礼物的数量,包括:
获取该目标用户的身份信息,将该目标用户在所述抽奖活动开启后送出的指定礼物的数量与该目标用户的身份信息关联并分别记录到所述服务器的内存和预设的数据库中。
可选地,按照得到的排序结果依次所述各目标用户中每个目标用户对应的礼物数量区间,包括:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
本申请实施例还提供一种抽奖数据处理装置,应用于提供直播平台的服务器,该装置包括:
获取模块,用于当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照预设顺序依次计算所述各目标用户中每个目标用户的礼物数量区间;
第一计算模块,用于计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值;
更新模块,用于当每确定一个中奖名额对应的中奖用户时,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差;
随机数确定模块,用于针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数;
第一查找模块,用于当所述各目标用户中存在中奖用户时,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间;
第一抽奖模块,用于当不存在该随机正数所属的礼物数量区间,则在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
可选地,上述的装置还包括:
第二查找模块,用于当所述各目标用户中不存在中奖用户时,在所述各目标用户所对应的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
可选地,上述的装置还包括:
第二抽奖模块,用于当所述中奖用户所对应的礼物数量区间中存在该随机正数所属的礼物数量区间,则将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间,若存在,则重新将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数。
可选地,在上述的装置中,所述获取模块按照得到的排序结果依次所述各目标用户中每个目标用户对应的礼物数量区间的方式,为:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
相较于现有技术,本申请实施例具有以下有益效果:
本申请实施例提供的一种抽奖数据处理方法及装置,当检测到在直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到该抽奖活动的抽奖时长时,根据参与该抽奖活动的各目标用户在该抽奖活动中的礼物赠送记录,计算得到每个目标用户的礼物数量区间。将各目标用户送出的指定礼物的数量之和作为一预设变量的初始值,每确定一个中奖名额,根据中奖用户的礼物数量区间的区间长度更新该预设变量的值。针对待确定的中奖名额,确定一小于预设变量的当前值的随机正数,当各目标用户中已经存在中奖用户时,在中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间;若不存在该随机正数所属的礼物数量区间,则在各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为该中奖名额对应的中奖用户。如此,让用户的中奖概率与其送出的指定礼物的数量相匹配,并且可以避免已中奖用户重复中奖,从而在直播平台上实现了可靠的抽奖过程。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种服务器的方框示意图;
图2为本申请实施例提供的一种抽奖数据处理方法的流程示意图;
图3为本申请实施例提供的一种数据结构示意图;
图4为本申请实施例提供的一种抽奖数据处理装置的功能模块框图。
图标:100-服务器;110-存储器;120-处理器;130-通信单元;200-抽奖数据处理装置;210-获取模块;220-第一计算模块;230-更新模块;240-随机数确定模块;250-第一查找模块;260-第一抽奖模块;270-第二查找模块;280-第二抽奖模块。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
如图1所示,是本申请实施例提供的一种服务器100的方框示意图。该服务器100提供有直播平台,所述直播平台可以是可供用户下载并安装到终端上的应用程序(Application,APP),通过该APP,用户可以获取服务器100提供的直播服务。
此外,用户也可通过终端上的浏览器登录到该直播平台,从而获取到该服务器100提供的服务。
服务器100包括抽奖数据处理装置200、存储器110、处理器120及通信单元130,存储器110、处理器120及通信单元130相互之间直接或间接地电性连接,以实现数据交互。例如,这些元件相互之间可以通过一条或多条通讯总线或信号线实现电性连接。抽奖数据处理装置200包括至少一个可以以软件或固件(firmware)的形式存储于存储器110中,或固化在服务器100的操作系统(Operating System,OS)中的软件功能模块或计算机程序等。
存储器110可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器120可以是一种集成电路芯片,具有信号处理能力。处理器120可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
通信单元130用于建立服务器100与外部终端(如,上述的终端)建立通信连接,以实现相应的数据交互。
应当理解,图1所示的结构仅为示意,服务器100还可以包括比图1更多或更少的组件,也可以具有比图1所示完全不同的配置。图1所示的各组件可以采用硬件、软件或其组合。
如图2所示,是本申请实施例中提供的一种抽奖数据处理方法的流程示意图。该抽奖数据处理方法可以应用于图1所示的服务器100。下面结合图1所示步骤对该抽奖数据处理方法做详细阐述。
步骤S210,当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照各目标用户送出的指定礼物的数量的大小顺序依次计算所述各目标用户中每个目标用户的礼物数量区间。
在直播过程中,主播可以通过直播平台的显示界面上的预设选项发起抽奖活动,当主播点击该预设选项时,服务器100可以检测到开启抽奖活动的操作指令。其中,主播可以在发起抽奖活动时,对该抽奖活动的抽奖时长进行设定,例如,可以为5分钟,该抽奖时长可以包括在所述操作指令中。
当检测到该操作指令时,服务器100可以开始计时,并对参与该抽奖活动的用户送出的指定礼物的数量进行统计,以在到达抽奖时长时对在送出指定礼物的用户抽取中奖用户,赠送相应奖品。其中,指定礼物通常由主播在开启抽奖活动时进行设定。
在此值得说明的是,到达抽奖时长可以不是严格地达到抽奖时长,当计时时长与抽奖时长的时间间隔小于10秒时,均可以视作达到了抽奖时长。例如,假设设定的抽奖时长为1分钟,则当计时时长达到55秒时,也可视作达到了抽奖时长。
可选地,在本实施例中,当检测到在直播平台开启抽奖活动的操作指令时,所述抽奖数据处理方法还可以包括如下步骤:
针对参与所述抽奖活动的每个目标用户,统计并记录该目标用户在所述抽奖活动开启后送出的指定礼物的数量。
实施时,当主播通过直播平台开启抽奖活动后,服务器100会检测到开启该抽奖活动的操作指令,从而开始统计参与该抽奖活动的目标用户赠送的指定礼物的数量。其中,目标用户即为参与该抽奖活动的用户。
在本实施例中,可以将用户的礼物赠送记录存储在服务器100的内存中,以便在抽奖结算阶段使用。具体地,可以构造基于哈希表实现的hashmap类hash_map<uid,gift_count>,用于存储用户的礼物赠送记录。其中,每个目标用户的uid和gift_count以键值对的形式存储,uid为键(key),gift_count为值(value)。其中,当任一目标用户送出一个指定礼物时,根据该目标用户的uid查找到该目标用户的gift_count,并将该目标用户的gift_count的当前值加1。
此外,考虑到服务器100在使用中可能会出现宕机的情况,为了使抽奖活动在服务器100宕机重启后能够继续进行,可以将各目标用户的礼物赠送记录在外部数据库(如,Redis数据库)中也存储一份。在此可以采用zset数据结构来存储,该数据结构如下:
zset<raffle_id,uid,gift_cnt>
其中,raffle_id为抽奖活动的标识信息,uid为目标用户的身份信息,gift_cnt为送出的指定礼物的数量。其中,每个目标用户的uid和gift_cnt构成该目标用户的礼物赠送记录。作为一种示例,在Redis中,一个抽奖活动中各目标用户的礼物赠送记录可以按照图3所示的形式存储。
其中,在通过zset数据结构存储礼物赠送记录时,通常是以抽奖活动的标识信息为键(key),以各目标用户的身份信息及所述各目标用户送出的指定礼物的数量位值(value)来进行存储。在value部分,目标用户的身份信息uid为一个成员(member),该目标用户送出的指定礼物的数量gift_cnt为分数(score)。由于zset是有序集,因此在存储的礼物赠送记录中,实际是按照score从大到小的顺序排列的。
实施时,在更新hash_map结构中任一目标用户的gift_count的值时,也会相应地在Redis中更新该目标用户的gift_cnt的值。当任一目标用户送出一个指定礼物时,可以通过incrby raffle_id uid 1这一指令在Redis中将该目标用户的gift_cnt的当前值加1。
如此,通过将各目标用户的数据记录在Redis数据库中,即便服务器100在抽奖过程中宕机,也能够快速地将礼物赠送记录恢复到服务器100的内存中,继续进行抽奖。
在抽奖活动结束进入结算阶段时,服务器100可以从内存中获取参与所述抽奖活动的每个目标用户的gift_cnt的当前值,即为该目标用户在本次抽奖活动中送出的指定礼物的数量。
在本实施例中,由于hashmap中各目标用户是按照gift_cnt的值从大到小的顺序排列的,因此,可以直接按照各目标用户在hashmap中的顺序,依次计算各目标用户中的每一个目标用户的礼物数量区间。具体计算方式可以通过如下步骤实现:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
其中,在本实施例中,礼物数量区间可以在服务器100中做如下定义:
struct RaffleCandidateInfo
{
int64_t uid;
int start_idx;
int end_idx;
int range;
};
typedof std::vector<RaffleCandidateInfo>RaffleCandidateVec;
针对上述的hashmap,可以遍历该hashmap中的每个目标用户,为每个目标用户生成上述的RaffleCandidateInfo结构,生成规则可以如下:
start_idx:针对遍历的第一个目标用户,start_idx(1)=1;第N个用户的start_idx(N)=end_idx(N-1)+1,其中,N≥2。
end_idx:第N个用户的end_idx(N)=start_idx(N)+gift_cnt(N)-1。
range:第N个用户的range(N)=gift_cnt(N)。
在此值得说明的是,在构造各目标用户的RaffleCandidateInfo结构时,可以按照一预设顺序进行,例如,可以按照各目标用户送出的指定礼物的数量的大小顺序(从大到小或从小到大),又如,可以按照各目标用户的礼物赠送记录的记录顺序。本实施例对此不做限制。
例如,在raffle_id为1234的抽奖活动中,有如下礼物赠送记录:
raffle_id | uid | gift_cnt |
1234 | 1001 | 7 |
1234 | 1002 | 4 |
1234 | 1003 | 6 |
1234 | 1004 | 2 |
则按照上述规则生成的RaffleCandidateInfo结构如下:[1001,1,7,7],[1002,8,11,4],[1003,12,17,6],[1004,18,19,2]。在此示例中,是按照各目标用户的礼物赠送记录的记录顺序依次计算各目标用户中每个目标用户的RaffleCandidateInfo结构的。应当理解,通过计算目标用户的RaffleCandidateInfo结构,即得到了该目标用户的礼物数量区间[start_idx,end_idx]。
在本实施例中,当生成一个RaffleCandidateInfo结构之后,即可将该RaffleCandidateInfo结构插入到集合RaffleCandidateVec中,其中,RaffleCandidateVec按照各目标用户的礼物数量区间[start_idx,end_idx]有序排列。
步骤S220,计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值。
步骤S230,每确定一个中奖名额对应的中奖用户,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差。
在本实施例中,为了确保每个目标用户的中奖概率与该目标用户送出的指定礼物的数量成正比,在确定第一个中奖名额时,以各目标用户送出的指定礼物的数量之和(约定为T)为用于抽奖的预设变量的初始值,每确定一个中奖名额,即获取与该中奖名额对应的中奖用户的礼物数量区间的区间长度,并将预设变量的当前值减去该区间长度得到预设变量的新的当前值。
步骤S240,针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数。
步骤S250,判断所述各目标用户中是否存在中奖用户。若是,则执行步骤S260,否则可以执行步骤S270。
在本实施例中,每确定一个中奖名额,可以将该中奖名额对应的目标用户的RaffleCandidateInfo结构添加到结果集合result_vec中,如此,实施时,可以通过判断结果集合result_vec是否为空,来判断所述各目标用户中是否存在中奖用户。
步骤S260,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间。若是,则可以执行步骤S280,若否,则执行步骤S270。
步骤S270,在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
步骤S280,将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间,若存在,则重新执行将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数的步骤。
针对步骤S260-步骤S280,可以通过如下方式实施:
遍历中奖用户的礼物数量区间,针对当前遍历到的礼物数量区间,判断该随机正数是否属于该礼物数量区间。若属于,则可以通过步骤S280得到新的随机正数,并遍历下一目标用户的礼物数量区间,并再次通过步骤S280中方式得到新的随机正数。当遍历至最后一个中奖用户时,若新的随机正数不属于最后一个中奖用户的礼物数量区间,则跳转至步骤S270。如此,可以避免已经中奖的目标用户重复中奖。
下面以一具体示例对上述的步骤S240-步骤S250做详细阐述:
假设在最终得到的RaffleCandidateVec中,包括N个RaffleCandidateInfo结构,各目标用户送出的指定礼物的数量为T。现需要抽出M名中奖者,则可以进行M轮抽奖,每轮确定一个中奖名额。
假设用Ti表示每一轮的预设变量,则第一轮时,预设变量可以用T1表示,第二轮时预设变量可以用T2表示,以此类推。具体抽奖过程如下:
第一,产生一个属于闭区间[1,T1]的随机数,即在1到所述预设变量的当前值之间确定一随机正数。在此过程中,该随机正数可以为1、T1及1-T1之间的任意值。
第二,假设确定的随机正数为random_num1=rand(1,T1),则可以在集合RaffleCandidateVec中查找random_num1所属的礼物数量区间,具体可以通过二分查找的方式查找满足如下条件的random_num1:
random_num1≥candidate_vec[k].start_idx&&
random_num1≤candidate_vec[k].end_idx
其中,若找到满足上述条件的第k个目标用户,则将第k个目标用户确定为第一个中奖名额,并将RaffleCandidateVec中的第k个元素(即,candidate_vec[k])添加到结果集合result_vec中。可选地,可以在result_vec中保持各个元素的有序排列。
第三,更新预设变量的值,得到第二轮的预设变量T2=T1-candidate_vec[k].range,并在[1,T2]中产生一个随机数random_num2=rand(1,T2)。
第四,判断result_vec中是否为空,若为空则可以执行第六步,若不为空则可以执行第五步。
第五,顺序访问result_vec中的元素,针对当前访问的元素,判断random_num2是否落在当前元素的礼物数量区间,若是,则将random_num2与当前元素的礼物数量区间的区间长度之和作为新的随机正数(约定为random_num2 (1)),并判断random_num2 (1)是否落在下一元素的礼物数量区间中。其中,假设result_vec中包括j个元素,则当random_num2 (j-1)不在result_vec的第j个元素的礼物数量区间中时,开始进行下一轮抽奖。
第六,在RaffleCandidateVec中各个元素的礼物数量区间中查找random_num2所属的礼物数量区间,即查找满足如下条件的元素:
random_num2≥candidate_vec[k].start_idx&&
random_num2≤candidate_vec[k].end_idx
则可以将满足上述条件的第k个用户作为第二中奖名额的中奖用户,并将该中奖用户的candidat_vek[k]元素插入到result_vec中。
第七,针对第i(i∈[3,M])个中奖名额,在[1,Ti]中确定一随机数random_numi,其中,Ti=Ti-1-candidate_vec[k].range,candidate_vec[k].range为上一轮中奖用户的礼物数量区间的区间长度。
第八,判断result_vec是否为空,若为空则执行第十步,若不为空则执行第九步。
第九,顺序访问result_vec中的元素,针对当前访问的元素,判断random_numi是否落在当前元素的礼物数量区间,若是,则将random_numi与当前元素的礼物数量区间的区间长度之和作为新的随机正数(约定为random_numi (1)),并判断random_numi (1)是否落在下一元素的礼物数量区间中。其中,假设result_vec中包括j个元素,则当random_numi (j-1)不在result_vec的第j个元素的礼物数量区间中时,开始下一轮抽奖。
第十,在RaffleCandidateVec中各个元素的礼物数量区间中查找random_numi所属的礼物数量区间,即查找满足如下条件的元素:
random_numi≥candidate_vec[k].start_idx&&
random_numi≤candidate_vec[k].end_idx
则可以将满足上述条件的第k个用户作为第i个中奖名额的中奖用户,并将该中奖用户的candidat_vek[k]元素插入到result_vec中。
如此循环执行,直至抽取出M个中奖用户为止。
通过上述方式,能够在时间复杂度较小的情况下,在直播平台上实现可靠的抽奖过程,在该抽奖数据处理方法中,用户中奖的概率与其送出的指定礼物的数量成正比,并且已经中奖的用户不会重复中奖。
如图4所示,是本申请实施例提供的一种抽奖数据处理装置200的功能模块框图,该抽奖数据处理装置200可以应用于图1所示的服务器100。
该抽奖数据处理装置200包括获取模块210、第一计算模块220、更新模块230、随机数确定模块240、第一查找模块250和第一抽奖模块260。
其中,获取模块210用于当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照预设顺序依次计算所述各目标用户中每个目标用户的礼物数量区间。
在本实施例中,关于获取模块210的描述可以参考步骤S210的详细描述,即步骤S210可以由获取模块210执行。
可选地,获取模块210按照得到的排序结果依次所述各目标用户中每个目标用户对应的礼物数量区间的方式可以为:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
第一计算模块220用于计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值。
在本实施例中,关于第一计算模块220的描述可以参考上述内容中对步骤S220的详细描述,即步骤S220可以由第一计算模块220执行。
更新模块230用于当每确定一个中奖名额对应的中奖用户时,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差。
在本实施例中,关于更新模块230的描述可以参考上述内容中对步骤S230的详细描述,即步骤S230可以由更新模块230执行。
随机数确定模块240用于针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数。
在本实施例中,关于随机数确定模块240的描述具体可参考上述内容中对步骤S240的详细描述,即步骤S240可以由随机数确定模块240执行。
第一查找模块250用于当所述各目标用户中存在中奖用户时,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间。
在本实施例中,关于第一查找模块250的描述具体可参考上述内容中对步骤S250-步骤S260的详细描述。
第一抽奖模块260用于当不存在该随机正数所属的礼物数量区间,则在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
在本实施例中,关于第一抽奖模块260的描述具体可参考对上述内容中的步骤S270的详细描述。
可选地,抽奖数据处理装置200还可以包括第二查找模块270。
第二查找模块270用于当所述各目标用户中不存在中奖用户时,在所述各目标用户所对应的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
可选地,抽奖数据处理装置200还可以包括第二抽奖模块280。
第二抽奖模块280用于当所述中奖用户所对应的礼物数量区间中存在该随机正数所属的礼物数量区间,则将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间,若存在,则重新将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数。
综上所述,本申请实施例提供的抽奖数据处理方法及装置,在抽奖活动结束时,根据参与该抽奖活动的各目标用户在该抽奖活动中的礼物赠送记录,计算得到每个目标用户的礼物数量区间。将各目标用户送出的指定礼物的数量之和作为一预设变量的初始值,每确定一个中奖名额,根据中奖用户的礼物数量区间的区间长度更新该预设变量的值。针对待确定的中奖名额,确定一小于预设变量的当前值的随机正数,当各目标用户中已经存在中奖用户时,在中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间;若不存在该随机正数所属的礼物数量区间,则在各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为该中奖名额对应的中奖用户。如此,让用户的中奖概率与其送出的指定礼物的数量相匹配,并且可以避免已中奖用户重复中奖,在直播平台上实现了可靠的抽奖过程。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种抽奖数据处理方法,其特征在于,应用于提供直播平台的服务器,该方法包括:
当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照预设顺序依次计算所述各目标用户中每个目标用户的礼物数量区间;
计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值;
每确定一个中奖名额对应的中奖用户,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差;
针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数;
当所述各目标用户中存在中奖用户时,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间;
若不存在该随机正数所属的礼物数量区间,则在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
2.根据权利要求1所述的抽奖数据处理方法,其特征在于,该方法还包括:
当所述各目标用户中不存在中奖用户时,在所述各目标用户所对应的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
3.根据权利要求1或2所述的抽奖数据处理方法,其特征在于,该方法还包括:
若所述中奖用户所对应的礼物数量区间中存在该随机正数所属的礼物数量区间,则将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间;
若存在,则重新执行将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数的步骤。
4.根据权利要求1或2所述的抽奖数据处理方法,其特征在于,当检测到在所述直播平台开启抽奖活动的操作指令时,该方法还包括:
针对参与所述抽奖活动的每个目标用户,统计并记录该目标用户在所述抽奖活动开启后送出的指定礼物的数量。
5.根据权利要求3所述的抽奖数据处理方法,其特征在于,记录该目标用户在所述抽奖活动开启后送出的指定礼物的数量,包括:
获取该目标用户的身份信息,将该目标用户在所述抽奖活动开启后送出的指定礼物的数量与该目标用户的身份信息关联并分别记录到所述服务器的内存和预设的数据库中。
6.根据权利要求1或2所述的抽奖数据处理方法,其特征在于,按照得到的排序结果依次所述各目标用户中每个目标用户对应的礼物数量区间,包括:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
7.一种抽奖数据处理装置,其特征在于,应用于提供直播平台的服务器,该装置包括:
获取模块,用于当检测到在所述直播平台开启抽奖活动的操作指令时,开始计时,并在计时时长达到所述抽奖活动对应的抽奖时长时,获取参与所述抽奖活动的每个目标用户在该抽奖活动中的礼物赠送记录,所述礼物赠送记录包括该目标用户的身份信息和该目标用户送出的指定礼物的数量,并按照预设顺序依次计算所述各目标用户中每个目标用户的礼物数量区间;
第一计算模块,用于计算所述各目标用户当前送出的所述指定礼物的数量的和,并将所述和作为预设变量的初始值;
更新模块,用于当每确定一个中奖名额对应的中奖用户时,将所述预设变量的值更新为所述预设变量的当前值与该中奖用户的礼物数量区间的区间长度之差;
随机数确定模块,用于针对待确定的中奖名额,在1到所述预设变量的当前值之间确定一随机正数;
第一查找模块,用于当所述各目标用户中存在中奖用户时,在所述中奖用户的礼物数量区间中查找是否存在该随机正数所属的礼物数量区间;
第一抽奖模块,用于当不存在该随机正数所属的礼物数量区间,则在所述各目标用户中的未中奖用户的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
8.根据权利要求7所述的抽奖数据处理装置,其特征在于,该装置还包括:
第二查找模块,用于当所述各目标用户中不存在中奖用户时,在所述各目标用户所对应的礼物数量区间中查找该随机正数所属的礼物数量区间,并将查找出的礼物数量区间所对应的目标用户作为与该中奖名额对应的中奖用户。
9.根据权利要求7或8所述的抽奖数据处理装置,其特征在于,该装置还包括:
第二抽奖模块,用于当所述中奖用户所对应的礼物数量区间中存在该随机正数所属的礼物数量区间,则将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数,并在其他中奖用户所对应的礼物数量区间中查找是否存在该新的随机正数所属的礼物数量区间,若存在,则重新将该随机正数与该随机正数所属的礼物数量区间的区间长度之和作为新的随机正数。
10.根据权利要求7或8所述的抽奖数据处理装置,其特征在于,所述获取模块按照得到的排序结果依次所述各目标用户中每个目标用户对应的礼物数量区间的方式,为:
针对第一个目标用户,将该目标用户对应的礼物数量区间的左端点数值设置为1,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值;
针对其他目标用户中的每一个目标用户,将该目标用户的前一目标用户所对应的礼物数量区间的右端点数值减去1,将得到的值作为该目标用户对应的礼物数量区间的左端点数值,将该左端点数值与该目标用户送出的所述指定礼物的数量的和减去1后作为该目标用户对应的礼物数量区间的右端点数值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810210600.9A CN108492437B (zh) | 2018-03-14 | 2018-03-14 | 抽奖数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810210600.9A CN108492437B (zh) | 2018-03-14 | 2018-03-14 | 抽奖数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108492437A true CN108492437A (zh) | 2018-09-04 |
CN108492437B CN108492437B (zh) | 2020-07-10 |
Family
ID=63339309
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810210600.9A Active CN108492437B (zh) | 2018-03-14 | 2018-03-14 | 抽奖数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108492437B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110087138A (zh) * | 2019-04-26 | 2019-08-02 | 广州华多网络科技有限公司 | 一种虚拟宝箱的处理方法、客户端及服务器 |
CN110233840A (zh) * | 2019-06-06 | 2019-09-13 | 广州虎牙信息科技有限公司 | 一种业务处理方法、装置、设备和存储介质 |
CN110944229A (zh) * | 2019-12-06 | 2020-03-31 | 网易(杭州)网络有限公司 | 一种针对直播间对象的数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581062A (zh) * | 2003-08-06 | 2005-02-16 | 金宝电子工业股份有限公司 | 限定随机数字产生方法 |
JP5483630B2 (ja) * | 2012-03-06 | 2014-05-07 | 東芝テック株式会社 | 情報処理装置及びプログラム |
CN106934908A (zh) * | 2017-03-17 | 2017-07-07 | 福建中金在线信息科技有限公司 | 一种抽奖方法和装置 |
CN107038788A (zh) * | 2017-04-06 | 2017-08-11 | 福建新大陆软件工程有限公司 | 一种序列匹配抽奖控制方法及系统 |
CN107481387A (zh) * | 2017-08-11 | 2017-12-15 | 众彩世纪广告传媒(北京)有限公司 | 一种概率型即时彩票的抽奖方法 |
-
2018
- 2018-03-14 CN CN201810210600.9A patent/CN108492437B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1581062A (zh) * | 2003-08-06 | 2005-02-16 | 金宝电子工业股份有限公司 | 限定随机数字产生方法 |
JP5483630B2 (ja) * | 2012-03-06 | 2014-05-07 | 東芝テック株式会社 | 情報処理装置及びプログラム |
CN106934908A (zh) * | 2017-03-17 | 2017-07-07 | 福建中金在线信息科技有限公司 | 一种抽奖方法和装置 |
CN107038788A (zh) * | 2017-04-06 | 2017-08-11 | 福建新大陆软件工程有限公司 | 一种序列匹配抽奖控制方法及系统 |
CN107481387A (zh) * | 2017-08-11 | 2017-12-15 | 众彩世纪广告传媒(北京)有限公司 | 一种概率型即时彩票的抽奖方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110087138A (zh) * | 2019-04-26 | 2019-08-02 | 广州华多网络科技有限公司 | 一种虚拟宝箱的处理方法、客户端及服务器 |
CN110087138B (zh) * | 2019-04-26 | 2020-11-20 | 广州华多网络科技有限公司 | 一种虚拟宝箱的处理方法、客户端及服务器 |
CN110233840A (zh) * | 2019-06-06 | 2019-09-13 | 广州虎牙信息科技有限公司 | 一种业务处理方法、装置、设备和存储介质 |
CN110233840B (zh) * | 2019-06-06 | 2022-02-25 | 广州虎牙信息科技有限公司 | 一种业务处理方法、装置、设备和存储介质 |
CN110944229A (zh) * | 2019-12-06 | 2020-03-31 | 网易(杭州)网络有限公司 | 一种针对直播间对象的数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108492437B (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109948669A (zh) | 一种异常数据检测方法及装置 | |
CN108492437A (zh) | 抽奖数据处理方法及装置 | |
CN106548343B (zh) | 一种非法交易检测方法及装置 | |
CN109034813A (zh) | 代表节点设备选举方法、装置、计算机设备及存储介质 | |
CN107220853A (zh) | 抽奖数据处理方法、装置、服务器及计算机存储介质 | |
CN110830234B (zh) | 一种用户流量分配方法及装置 | |
CN111125118B (zh) | 关联数据查询方法、装置、设备及介质 | |
CN109117275A (zh) | 基于数据分片的对账方法、装置、计算机设备及存储介质 | |
CN108600315A (zh) | 区块链路由处理方法、装置及存储介质 | |
CN109542395A (zh) | 抽奖信息确定方法、装置、设备以及存储介质 | |
CN112966865B (zh) | 携号转网预测方法、装置及设备 | |
CN107517394A (zh) | 识别非法用户的方法、装置及计算机可读存储介质 | |
CN111598139A (zh) | 数据处理方法及系统 | |
CN107547266A (zh) | 在线量异常点的检测方法和装置、计算机设备和存储介质 | |
CN110166344A (zh) | 一种身份标识识别方法、装置以及相关设备 | |
CN112738172A (zh) | 区块链节点的管理方法、装置、计算机设备和存储介质 | |
CN108334553B (zh) | 基于区块链的数据筛选方法和装置 | |
CN111783830A (zh) | 基于oct的视网膜分类方法、装置、计算机设备及存储介质 | |
CN111401969B (zh) | 用于提高用户留存率的方法、装置、服务器及存储介质 | |
US20050107161A1 (en) | Game execution system and game execution method | |
CN106332054A (zh) | 数据迁移身份验证的方法及装置 | |
CN106504298B (zh) | 曲线绘制方法及装置 | |
CN110880042B (zh) | 网络游戏报名信息处理方法及装置 | |
CN114595146A (zh) | Ab测试方法、装置、系统、电子设备及介质 | |
CN110111131A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |