首页 > 技术文章 > 今日击败算法

moster 2018-02-01 10:30 原文

昨天产品上线第一天发现今日击败模块第一天所有人会出现击败0%

原始方案:
今日击败=1-(今日已打卡人数/(今日已打卡人数和昨日打卡人数之间的最大值)

例子:

第一天报名10人
无法打卡
第二天又报名10人 一共20人
第一人:1-(1/1)=0% 第二人: 1-(2/2)=0% 第三人: 1-(3/3)=0% 三人打卡、17人出局
第三天没人报名 一共20人
第一人:1-(1/17)=94% 应该是100%

 

于是自己想出方案一:

获取报名人数+上一天留下人数

第一天报名10人

  无法打卡

第二天又报名10人  一共20人

  第一人:1-1/(10+0)=90% 第二人:1-2/(10+0)=80% 第三人:1-3/(10+0)=70%

  共计:3人打卡  17人出局

第三天报名50人   一共53人

  第一人:1-1/(50+3)=98.1%

 这个方案的问题出在这样一来第一人无法为100%永远都不可能

于是出现方案二:

通过切割时间来划分一小时3600秒 打卡持续时间3小时一共10800秒

把用户打卡的时间换算成秒=A

1-A/10800就可以求出今日击败

 

推荐阅读