zoukankan      html  css  js  c++  java
  • 海量数据算法

    http://topic.csdn.net/u/20090806/16/72971F41-0EE8-48C3-BBD9-43572A78AD1F.html

    1.有1亿个浮点数,请找出其中对大的10000个。提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相当大的空间,因此不能一次将全部读入内存进行排序。

    2:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。

    3:有一篇英文文章(也就是说每个单词之间由空格分隔),请找出“csdn”着个单词出现的次数,要求效率最高,并写出算法的时间级。

    4:给定一个日期2031-7-2,求出该日为星期几(已知2002-3-28为星期四)。只要求说明思路,不要写java code

    1.有1亿个浮点数,请找出其中对大的10000个。提示:假设每个浮点数占4个字节,1亿个浮点数就要站到相当大的空间,因此不能一次将全部读入内存进行排序。

    答:
    1.每100万个一组,读到内存(大约要4M内存)中,构建大顶堆,把堆顶(最大数)和文件号记录到一个100大小的数组A,再写回到磁盘,形成一个文件,这样共形成100个文件。
    2。这时,A数组也添满了,再对这A数组建大顶堆。
    3.堆顶A[0]输出。
    4.对堆顶对应的文件(同文件号确定)去掉堆顶后重新调整堆,再把新的堆顶放到A[0].
    5.对A调整堆。
    6. 对2~4步循环10000次,最大的10000个数就选出来了。

    2:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。

    答:
    简单的说.
    1. 每次读入500M个整数用快速排序排序。存为文件。
    2.把产生的20个文件用归并排序两两合并,直到归为一个文件。
    3.在文件中找到第5G和第5G+1个数,求这两个数的平均数即所求。


    3:有一篇英文文章(也就是说每个单词之间由空格分隔),请找出“csdn”着个单词出现的次数,要求效率最高,并写出算法的时间级。

    答:
    1.把整个文章存入char[]数组chars。
    2.根据下标变量index扫描chars。
    3.如果chars[index]==' ' && chars[index+1]!=' ';则从index+1开始判断接下来的四个字符是不是csdn.只要有一个不匹配,或者下一个字符是空格,则不再匹配。如果全匹配则counter++.
    算法的时间复杂度为O(n) n为文章的长度。和“csdn”没有关系,index不会有重复的值。

    4:给定一个日期2031-7-2,求出该日为星期几(已知2002-3-28为星期四)。只要求说明思路,不要写java code

    答:
    1.根据条件,2002-3-31为星期日.
    2.从2002-4-1开始统计到2031-7-2的天数counter。
    3.2002年 4,5,6,7,8,9,10,11,12月数加起来30*9+5=275天。
    4.2003~2030年的天数=365*(30-3+1)+30/4
    5.2031年的天数,1~6月的天数=6*30+3-2
    7.20031年7月的天数为2.
    8.上面3~5的天数之和放入counter.
    9.counter%7为0是星期天,其它情况是几就是星期几。

    我估计不让用Calender。用Calender就简单了。2002-3-28为星期四这个条件也就没有用了。

  • 相关阅读:
    面向服务的体系架构 SOA(三) --- Zookeeper API、zkClient API的使用
    面向服务的体系架构 SOA(二) --- 服务的路由和负载均衡
    面向服务的体系架构 SOA(一) --- 基于TCP、HTTP协议的RPC
    eclipse集成dorado5插件
    java微信公众号开发token验证失败的问题及解决办法
    oracle使用中的一些问题
    JAVA设计模式之装饰者模式
    JAVA设计模式之观察者模式
    JDBC三层架构
    如何使用JDBC实现数据访问对象层(DAO)
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175889.html
Copyright © 2011-2022 走看看