随笔分类 -  C#

摘要:今天是个可喜的日子!经过一系列的改进,1店5口计算时间从之前的近20分钟减少至99秒……改进内容如下1.取消链表搜索: 搜索过程和计算过程中,都需要判断目标节点是否在路径链表中,用的是LinkedList的Contains方法。 这个方法在每次递归循环中调用了0~8次,在面数计算方法中也要调用0~4次。花费的时间绝对不少。 原本先是用List去代替LinkedList,结果花费时间不减反增。 后来才想到应该直接在地图数据上做标记。地图标记原本很复杂,空地、起点、终点,都是不同标记。 干脆把地图数据取出来重新建立一个标记表,不可行走的都是0,可行走都是1,而路径标记为2. 每次入栈做... 阅读全文
posted @ 2012-03-21 19:34 妖気 阅读(829) 评论(0) 推荐(0)
摘要:昨天一直在琢磨,看怎样能缩短时间。函数、方法、判断什么的都没办法改进了。那就只有改善算法了。后来总算想到一个还算可行的办法。当如上图的情况下,很明显往后再怎么寻路,都不可能到达终点。加个判断直接把此节点false掉岂不是能节省大部分的无用递归?那如何判断呢?当point(2,5)遍历寻找四周可用节点进行递归之前,先调用A*寻路看所有可用节点能否到达终点即可。无法到达则放弃。此图里面,point(2,5)是被放弃的,后面省去的递归数至少好几千。而如果每次递归之前调用A*的话,总时间是会翻好几番的。到底A*花的时间多,还是省去的递归时间多,那就只能实际测试一下才知道了。于是花了大量时间把A*独立出 阅读全文
posted @ 2012-03-20 21:16 妖気 阅读(528) 评论(0) 推荐(0)
摘要:苦思无果之余,某群友发了个帖子给我,我一看,同样是求2点间所有路径的算法,用的是C++和结点栈。想法非常独特,引用了一个线的定义。完美解决了递归改为循环中的路径标记问题。于是本人辛辛苦苦弄了半天终于把递归改为了while循环+结点栈。测试后雷了……花的时间竟然比原来的递归还多一点!我这是何苦来哉、、、其实作者文章开头就已经声明了,效率不高。但没想到比递归还要低,那还不如用递归呢?该帖地址俺就不贴了。下面是改过后的代码。估计是路径标记的判断和更新花费太多时间。看来需要从其他方面下手了。 private LinkedList<Point> paths;//当前键值集合 ... 阅读全文
posted @ 2012-03-18 21:15 妖気 阅读(524) 评论(0) 推荐(0)
摘要:1.递归与非递归的区别:递归的代码量比非递归的代码量少,因为非递归需要额外的变量记录当前所处的位置信息,以及额外的控制语句。而递归所使用的方式是函数调用,这是非常自然的栈结构,不需要记录位置信息,不需要添加控制语句,这些工作都由函数调用的特性解决了。递归的执行效率比非递归的执行效率低,因为递归的实质是函数调用,而函数调用必然要进行线程栈空间的分配,记录每一次函数调用前的状态等工作,开销是比较大的。而非递归则不需要进行这些工作。递归与非递归调用最主要区别就是在函数调用上。在计算机的工作方式中,函数调用是以栈结构来实现的,最早调用的函数处于栈底,最晚调用的函数处于栈顶,栈中存放的是每个函数中的局部 阅读全文
posted @ 2012-03-18 12:20 妖気 阅读(9398) 评论(0) 推荐(0)
摘要:经群里高人点拨。决定还是先把算法优化下试试。递归算法本身效率就比较低下,由于其便捷性,还有本人思维狭隘性,目前还无法想出替代它的方法。只能从递归内部的逻辑运算和变量等开始着手。先在各个过程里加上计时器,看哪里耗时最大。例如: timer = new Stopwatch(); timer.Start(); times[0] = (int)timer.Elapsed.TotalMilliseconds; searchAll(startTile, paths); times[0] = (in... 阅读全文
posted @ 2012-03-17 23:39 妖気 阅读(807) 评论(1) 推荐(0)
摘要:应广大群众的要求,终于开始着手研究最优路径了。其实最初一直认为,计算量太大,家用电脑的性能根本就无法实现。等真的做了之后才知道……真的无法实现!!何谓最优?以QQ超市的经营理念,应该满足如下要求: 1.销售面数最大 2.充分利用所有空间 3.既要满足非RMB玩家的要求(全单面),又要满足RMB玩家的要求(多放双面和4面) 4.单格货架、双格货架能合理搭配摆放在空位上。基本上,除了第一点,其他都无法满足要求……----------------------------------------------------想了很久,基本思路:用穷举法找到所有路径,然后计算找出面数最大路径。具体如下... 阅读全文
posted @ 2012-03-16 20:09 妖気 阅读(861) 评论(0) 推荐(0)