still4吧 关注:9贴子:729
  • 4回复贴,共1

【技术】世界城点随机算法优化

只看楼主收藏回复

一楼度娘


IP属地:北京1楼2016-07-13 15:24回复
    效果统计
    原算法
    1、2657ms 查询空闲点时间
    2、684ms 循环所有点时间
    3、2024ms 获取周围4个点
    4、8271440ms 检查点是否空闲
    新算法
    1、2657ms 查询空闲点时间
    2、45ms 循环所有点时间,我也不知道为什么会变快
    3、73ms 统计覆盖数据时间
    4、28ms 生成空闲列表


    IP属地:北京3楼2016-07-13 15:30
    回复
      擦 二楼没了


      IP属地:北京4楼2016-07-13 15:31
      回复
        * 自动迁城规则:(x,y) (x-1,y) (x,y-1) (x-1,y-1) 都空闲的时候认为(x,y)可用
        * 旧算法:
        * 原先算法为循环各点,查找这个点周围4个点是否可用,availableBornPoints.contains(otherId)单次执行时间段,但是进行上万次执行就会导致delay
        * 新算法:
        * 创建1200x1200城点的二维数组,获取所有空闲的点,将(x,y) (x+1,y) (x,y+1) (x+1,y+1)覆盖值+1
        * 循环数组,查找所有覆盖值为4的点加入空闲列表中
        * 从空闲列表中随机出城点,进行此点和周围点的pointLock检测


        IP属地:北京5楼2016-07-13 15:31
        回复
          private List<Long> timeAccumulator;
          private List<Long> timeData;
          private void startAccumulatorRecord(int index){
          timeData.set(index, System.currentTimeMillis());
          }
          private void endAccumulatorRecord(int index){
          timeAccumulator.set(index, timeAccumulator.get(index) + System.currentTimeMillis() - timeData.get(index));
          timeData.set(index, 0l);
          }
          timeAccumulator = new ArrayList<Long>(){{add(0l);add(0l);add(0l);add(0l);add(0l);add(0l);}};
          timeData = new ArrayList<Long>(){{add(0l);add(0l);add(0l);add(0l);add(0l);add(0l);}};
          startAccumulatorRecord(0);
          endAccumulatorRecord(0);


          IP属地:北京6楼2016-07-13 16:02
          回复