zoukankan      html  css  js  c++  java
  • 关于如何在海量手机号中刷选出想要的手机号

     

    关于如何在海量手机号中刷选出想要的手机号

    一.业务场景需求

    现在有海量手机号,如何快速筛选出固定地区的手机号,现需筛选出所有A地区的手机号,
    根据规定,手机号前七位数决定手机的地区。前七位数为手机号地区号段,A地区有3000个号段,现在海量手机号数目3000,0000个

    二.解决思路

    1.将所有号段生成带标记的数组,(数组即为存放数据的地方,可以想象为杯子,有多少个号段就有多少个杯子),每个号段拥有一个数组,此时数组为空,
    2.将所有手机号前七位与数组号段匹配,匹配成功则将手机号丢入该数组
    3.输出筛选过的不同地区的数组(每个数组中存放的是同一个地区的号码在同一个数组中)

    关于哈希,散列的含义
    哈希算法一般用于快速查找和加密算法。
    哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
    

    三.业务逻辑实现

    使用awk为例
    生成两个文件a和b
    
    a中放入5个手机号
    18119628342
    17319319626
    15645673456
    18396264567
    17634562378
    
    b中放入手机号号段
    1731931
    1564567
    1811962
    1839626
    1763456
    第一步:将手机号号段生成五个数组(杯子),初始化这些数组
    第二步:将手机号前七位截取和五个数组进行匹配,若匹配成功则将该手机号放入数组
    第三步:打印出每个数组的内容
    
    awk -f
    #运行前
    BEGIN{
      print("start!-------")
      print("开始读取号段文件")
    }
    #运行中
    {
      if(NR==FNR){
        #这是在第一个文件
        printf "%6s 
    ",$0
        seg[$0]=""//将号段创建为数组,并将每个数组置空初始态
      }
      else{
        #这是第二个文件
        //substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分
        head =substr($0,0,7)
        if(head in seg){
          seg[head]=seg[head]"
    "$0
        }
      }
      #运行后
      END{
        print("过滤后的号码结果列表为:")
        for(i in seg){
          print seg[i] "
    ";//i为每个数组的下标标识
        }
        printf "End:.........
    "
      }
  • 相关阅读:
    实习日记11
    实习日记10
    实习日记9
    实习日记7
    我自己的颜色库
    实习日记5
    实习日记4
    算法导论2:几个习题 2016.1.2
    算法导论1:插入排序和归并排序 2016.1.1
    和算法导论没什么关系0.手电筒过桥问题详解
  • 原文地址:https://www.cnblogs.com/shuia/p/9300234.html
Copyright © 2011-2022 走看看