已经接触了一段时间的ACM(详见百度百科)了,每回刷杭电oj的题累了的时候,就喜欢去看Ranklist里面的排名,看看前面的牛人的格言,让自己有一点憧憬。有一天突然好奇杭电上的人做的总题数的数量与人数之间有怎样的分布规律,这样就可以知道大多数的人做了多少题就停了下来。

说干就干,我先用用java代码写了一个抓取上面Ranklist网页的程序到本地后,利用正则表达式解析内容并提取其中的数据,最后导入到数据库中。技术方面不想讲的太详细,只想说下其中遇到的问题。 
抓取网页速度太慢。近两千个网页似乎抓取了近十分钟,后来采取多线程抓取网页,由于学校网速还是很慢,速度只提升了几倍。 
利用正则表达式提取网页中的内容时,由于正则表达式选取的问题有些用户名中含有<  >导致一些数据提取错误,不过后来解决了。 
导入mysql数据库太慢(数据比较多),不知道是不是可以用多线程对数据库中的同一个表进行写入,如果可以的话,效率有没有提高。

获取到数据只是第一步,接下来更麻烦的工作是数据分析了。图像比较直观,先画个图像。说明:X轴代表解决题目的数目,Y轴代表解决了这么多题的人数。虽然杭电有20多万注册量,但只有前60000名刷过的题数大于等于3,我们不考虑60000名以后的。

第一次看到程序画出来的图,感到不可思议。我原先猜测图像可能会有一些波峰波谷。但是图像并没有这样的特征,而是飞速的下降直到趋于平缓。得到大致图像后,并没有结束,我想用一个函数关系来近似描述这个曲线。 
     于是我和我的室友将这些数据输入到matlab中来求拟合曲线,选取拟合程度最好的两个数据如下:

General model Power2: 
       f(x) = a*x^b+c 
Coefficients (with 95% confidence bounds): 
       a =  1.571e+004  (1.53e+004, 1.612e+004) 
       b =     -0.9897  (-1.004, -0.9758) 
       c =      -38.22  (-42.7, -33.75)

Goodness of fit: 
  SSE: 2.529e+006 
  R-square: 0.9731 
  Adjusted R-square: 0.9731 
  RMSE: 50.47

General model Exp2: 
       f(x) = a*exp(b*x) + c*exp(d*x) 
Coefficients (with 95% confidence bounds): 
       a =  4.392e+004  (-5.091e+017, 5.091e+017) 
       b =     -0.1001  (-1.629e+005, 1.629e+005) 
       c = -3.835e+004  (-5.091e+017, 5.091e+017) 
       d =     -0.1001  (-1.852e+005, 1.852e+005)

Goodness of fit: 
  SSE: 3.762e+006 
  R-square: 0.96 
  Adjusted R-square: 0.9599 
  RMSE: 61.58

拟合度最高的函数是 
       f(x) = a*x^b+c 
其中 
a =  1.571e+004  (1.53e+004, 1.612e+004) 
b =     -0.9897  (-1.004, -0.9758) 
c =      -38.22  (-42.7, -33.75)

让我们来使这个式子更简洁。我们不考虑a 和 c,而b近似于-1,最后得到

Y  =  1 / X

  想必大家都知道了,这就是我的题目是这个函数的原因。竟然是反比例函数,这代表什么涵义呢? 
  这样,我们规定刷的题越多越牛逼,那么这个函数说明了牛逼的程度和牛逼的人数成反比。这是什么破结论啊,不用这个我都知道啊。不过我实在没想出好的自然语言去解释这个式子,不知道读者们有什么看法。 
  但是我们更深入的去分析数据,发现刷了400题以下的占总人数的99%,而刷题数>=400的人只有1%,那些刷题过了400题的,应该就是我们口中所说的大神吧。 
     这就像我们的人生的经历,每个人都想成为人群中的1%,但是大多数人都在这之前停了下来。我们会想到一切客观的因素,来叹诉命运的不公。但事实却是,我们还不够努力。

最后送一句话给那些正在实现自己梦想途中的ACMer 
做好1000道题,区域赛就可以拿金牌了。 
                                              ----郭嵩山

http://875880923.iteye.com/blog/1963400的更多相关文章

  1. http://chenzhou123520.iteye.com/blog/1811340

    http://chenzhou123520.iteye.com/blog/1811340

  2. [转]http://m635674608.iteye.com/blog/1750833

    转载地址:http://m635674608.iteye.com/blog/1750833 在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个 ...

  3. rabbitMq 转自 http://gaoyangang.iteye.com/blog/1566600

    rabbitMq  转自 http://gaoyangang.iteye.com/blog/1566600

  4. http://jinnianshilongnian.iteye.com/blog/1996071

    http://jinnianshilongnian.iteye.com/blog/1996071 http://my.oschina.net/jkcui/blog/388400 http://tian ...

  5. http://jinnianshilongnian.iteye.com/blog/2018936

    http://jinnianshilongnian.iteye.com/blog/2018936

  6. http://jadethao.iteye.com/blog/1926525

    http://jadethao.iteye.com/blog/1926525 ————————————————————————————————————————————————————————————— ...

  7. http://wsj356428476.iteye.com/blog/1655032

    http://wsj356428476.iteye.com/blog/1655032 http://jingyan.baidu.com/article/19192ad83ce167e53e570705 ...

  8. spring mvc入门教程 转载自【http://elf8848.iteye.com/blog/875830】

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  9. 《C和指针(Pointer on c)》 学习笔记(转自:http://dsqiu.iteye.com/blog/1687944)

    首先本文是对参考中三个连接的博客进行的整理,非常感谢三位博主的努力,每次都感叹网友的力量实在太强大了…… 第一章 快速上手 1.  在C语言中用/*和*/来注释掉这段代码,这个实际上并不是十分的安全, ...

随机推荐

  1. nginx服务傻瓜搭建

    nginx服务傻瓜搭建 安装步骤: 一.先准备好相关源码包和程序包,如下图 所有包都在云服务器的/src目录下. 二.安装 1.安装nginx服务器,支持vod stream.fileupload c ...

  2. Geeklink引领智慧新生活!

    煤油灯成为古董,管道天然气进入厨房,电脑挤进生活,手机代替书信成为通讯的主要工具-这些变化无不提醒我们,时代在变迁,科技在发展.而最近朋友圈和电视又在播报智能家居的生活方式-智能家电能实现怎样的情景功 ...

  3. [bzoj2653][middle] (二分 + 主席树)

    Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...

  4. BZOJ 1565: [NOI2009]植物大战僵尸

    1565: [NOI2009]植物大战僵尸 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2317  Solved: 1071[Submit][Stat ...

  5. 常用linux手头命令

    过滤ip ifconfig eth0|grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}"|sed -n '1p' ifconfig|sed -n '2p' ...

  6. 通过form表单的形式下载文件。

    在项目中遇到问题,要求动态拼接uri下载文件.但是由于项目的安全拦截导致window.location.href 和 window.open等新建窗口的方法都不行. 无意间百度到了通过form表单来下 ...

  7. [EF1]POCOs(Plain Old C# Object)Entity Framework 4.x: POCOs入门

    原文链接:http://www.cnblogs.com/hjzhang/archive/2011/05/18/2050530.html POCOs 是在Visual Studio 2010和ASP.N ...

  8. js整理

    Js脚本语音 网页里面使用的脚本语音 基础语法 注释语法  单行注释// 多行注释/**/ 嵌入js代码  尽量靠下写  用<script type="text/javascript& ...

  9. Web javascript 中常用API合集

    来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称,只读 Node. ...

  10. SQL基础语法(三)

    SQL WHERE 子句 WHERE 子句用于规定选择的标准. WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法SELECT 列名称 FROM 表 ...