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

  • 相关阅读:
    鞍点计算
    hdu-2546 饭卡 01背包
    判断2的个数
    1959: 图案打印
    1913: 成绩评估
    1908: 蟠桃记
    采药问题 01背包
    JAVA反射机制_获取Class中的构造函数
    JAVA反射机制_获取字节码文件对象
    tcp饭卡上两地分居克里斯丁
  • 原文地址:https://www.cnblogs.com/dbycl/p/7474110.html
Copyright © 2011-2022 走看看