zoukankan      html  css  js  c++  java
  • 分享一道面试题

    Bitmap处理大数据量的数据赛选

    背景:

    用户注册时,系统会随机分配一个7-8位纯数字ID。要求保留6类规则的靓号,不被分配出去。

     靓号规则如下

    顶级靓号, // AABBCC AAABBB ABABAB ABCABC 6A 7A

    精品靓号, // 3A 3顺 4A 4顺 5A 5顺

    爱情靓号, // 520 521 920 921 1314 1711 9421          包括其中之一即算匹配

    生日靓号, // YYYYMMDD YYYYMDD/YYYYMMD YYYYMD/YYMMDD  为方便计算,只考虑1970至2020年之间的生日

    手机靓号, // 134 135 136 137 138 130 131 186 180 189 包括其中之一即算匹配

    普通靓号, // AABB ABAB 

    分析:

        7-8位纯数字忽略0打头则范围是1000000 - 99999999  一共99000000个数
        int长度4字节 32bit 需要一维数组长度 99000000/32 = 3093750  N = 3093750
        最小角标应该从0开始 实际最小角标为 1000000/32 = 31250 所以计算的角标均减去常量 M = 31250
        由于点阵数据重复对查询结果没有影响 所以在生成靓号的过程中不考虑重复出现的数据

    * 处理过程分4步走,前三步为一次性动作
    * 1、根据靓号规则生成基础靓号

    *  2、根据数字长度要求,通过补位算法来满足数据长度 7 - 8 位
    * 3、生成的靓号放入bitmap中
    * 4、生成随机数并判断是否在bitmap中

    伪代码:

    1、生成基础靓号

    //AAABBB

     Clipboard Image.png

    2、补位,保存到文件

     Clipboard Image.png

     Clipboard Image.png

    3、从本地文件加载靓号放到bitmap

     Clipboard Image.png

    4、判读是否为靓号

     Clipboard Image.png

  • 相关阅读:
    #最小生成树,Trie#CF888G Xor-MST
    #Tarjan#洛谷 5676 [GZOI2017]小z玩游戏
    #区间dp#CF1114D Flood Fill
    #构造,二分#[AGC006B] [AGC006D] Median Pyramid
    #0/1分数规划#AT1807 食塩水
    #笛卡尔树#洛谷 3793 由乃救爷爷
    #同余最短路#洛谷 2371 [国家集训队]墨墨的等式
    awk命令使用
    k8s快速删除所有退出的pod
    ratticdb密码管理工具安装使用
  • 原文地址:https://www.cnblogs.com/dbycl/p/7474110.html
Copyright © 2011-2022 走看看