状态机的应用:几十ms在百万数据量中搜索

      由于一直在学习状态机,其知识量之大,确实是我所想象不出来的,最近在论坛里看问题,只要是能和状态机相关的,我都会仔细的捉摸。其中要想学会状态机,对内存的把握,对数据管理的把握,尤其是对数据结构的把握都是相当基本的要求。说来惭愧,学了这么长时间。还是不得其门而入,虽然写了一些程序,总结了一些东西,但是总是和自己所希望的相去甚远。但是进步总是在潜移默化当中发生的,只要肯好好努力,收获还是有的。习惯了定一个目标,做一个计划,之后努力去实现它,但这次真的感觉有点累。为了那遥不可及的目标,还是需要默默的走下去!状态机我真爱死你了,欲罢不能。

      呵呵扯远了,还是言归正传吧,昨天早上在论坛里看到了一个帖子

     http://topic.csdn.net/u/20090920/21/8997ec64-c81d-426f-a714-575f3db06b9d.html

     大致要求如下:

     (1).存在数据列表,格式为,每一行为一个对象
             x,y,width,height,zorder
              0,0,10,20,1
               2,2,30,20,2
                ...
                ...
              (x,y,width,height)确定一个正方形,zOrder层次

       (2).要求给定1点(x,y),找出包含该点的所有对象.并按zOrder大小从大向小排
       (3).要求给出一个正方形(x,y,width,height),找出包含该正方形内的所有对象
           (分两种情况1.完全包含.2不完全包含(只要一部分在方向内就行))
        (4)自已定义数据结构和存放形式,要求算法复杂度尽可能小,不要给一个要求全部遍历判断的方式.
                      最好在O(1)或O(log2n),因为方法调用频度高和N很大(100000)

总结一下吧,最开始我的方法10万的数据,我最开始的搜索方法需要600多个ms,到后来的百万数据只需要几十个ms的时间,所有我用到的东西,除了算法,几乎都是我最近学习状态机练出来的。其中第一个方法从面对问题,到想方法,到编码,最后到测试,我只花了不到三个小时的时间,我个人对这个结果是很满意的,虽然我感觉自己的进步很慢。我建议大家多学习学习状态机,开阔一下视野(当然或许许你已经不需要了),最起码要知道,不是编译原理包含状态机,而是状态机包含编译原理,词法分析器也只是状态机的一种应用。状态机比想象的广的多的多。

      最后贴一下代码,大部分想法都已经在那个帖子里说了,这里只概略的总结一下:

方法一:遍历链表,基本上要搜索所有数据

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值