开发者社区 问答 正文

关于建表和算法的问题,

我有这么一个需求:要求记录用户扣量的记录,根据用户使用情况来扣量,用多少扣多少,没有特别的情况
建个表:shiyong
为了方便查看,这里我只拿一个用户a来举例
1
建个表:liwu
还有一个表,专门记赠送A的费用记录,但是赠送的记录有这么一条规则“只能在使用期限内有效”,如果超过了时间则无效
有效时间:5,表示5天
2
那么,这里就有这么几个情况:
a没有收到过赠送,这个好算:shiyong.扣量的总和
a收到过赠送,在有效期内刚好抵扣完,这个也好算:shiyong.扣量的总和-liwu.收到
最难算的应该是下面这种情况了:
如果用户在13年-14年不间断的增加扣量
前半年没收到任何赠送
后半年不间断陆续收到赠送
有的有效期短,只有2天,有的有30天等不同有效期、不同抵扣量
有的赠送在有效期内全部使用完,有的赠送在有效期内只用了一部分
提问,上诉最后一种情况,该怎么处理呢?一条一条的遍历吗?
上面只举了一个用户一年的使用量,如果有N个用户,2、3年的记录,那效率不是相当低下?

展开
收起
落地花开啦 2016-02-20 16:59:33 1954 分享 版权
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    算法方面的话建议,将赠送表按时间建立线段树(有个隐患,当两个赠送时间有重叠的时候,拆分为3个赠送方便处理 ),再将使用量投入相应节点计算总和,最后遍历树就知道最终结果了。算法复杂度:O(n) = N*log(N) 大概这样吧。用存储过程效率好一点。

    2019-07-17 18:45:31
    赞同 展开评论
问答分类:
问答地址: