主题:刚才看了MOZ解答的"一个大九宫格小九宫的游戏"的感想!
强强
[专家分:4740] 发布于 2007-02-21 18:50:00
同题目,我心里的想法只有一个字加十个符号:"强!!!!!!!!!!"希望大家都看看,如果哪位高手从中看出MOZ的算法,别忘了给我讲讲.
回复列表 (共23个回复)
沙发
moz [专家分:37620] 发布于 2007-02-21 20:37:00
少拍..
老实说,我自己现在都想不起来了.
如果现在让我重新做,估计我会换方法了,
毕竟,字符串效率上好像比上不数组,只是它比较方便罢了.
如果我会用C的话,效率也许会更高些.
板凳
moz [专家分:37620] 发布于 2007-02-21 20:40:00
我头有点晕,乱糟糟一团,那好像是一年前的事情了.我自己都看不清楚了.
3 楼
moz [专家分:37620] 发布于 2007-02-21 20:41:00
其实你吹了那么久,你自己有没有运行过的?
4 楼
moz [专家分:37620] 发布于 2007-02-21 21:07:00
他第一个8应该是位置错了
(这是论坛上人尽皆知的小漏洞:第一行的前导空格会被截除)
5 楼
强强 [专家分:4740] 发布于 2007-02-22 00:03:00
我怎么没运行过,没有事实依据我是不会乱说话的
运行的时候我把一些数字删掉了,之后用空格替代,还是求的很准,所以才写的这个帖子,之所以这么写我觉得你水平挺高,我很欣赏,至于拍马屁,呵呵,没那个必要,再说我也没那个习惯。
6 楼
rickone [专家分:15390] 发布于 2007-02-22 04:52:00
MOZ,数独还值得研究的。解一个puzzle对计算机来说是小case,但是解全部的呢?由一个终盘解全部初盘呢?解极小初盘呢?全部终盘?太多了~我现在比较关心数独的生成,就是出题,而且要出难点的~类似的问题还有数独的难度评价等~
7 楼
moz [专家分:37620] 发布于 2007-02-22 10:12:00
老ONE同志,理论我不懂,水平太低,高度不够,很抱歉.
不过有具体的题目,你可以放马过来看看我能不能解决.
至于强歌再三要求我解释我的那个代码,
老实说,我自己都还没有看懂,(狂汗)
不过我昨晚研究了一个晚上,自己就在那里狂笑了一个晚上.
(实在没办法,居然自己都没看懂自己的代码)
还有,我居然在家里的电脑里找到了源代码.
假如你有兴趣的话,我可以给你看看.
跟发上来的,当然会有点区别,贴上来的东西,是经过处理的,
(把空格都删除了,显得程序简洁紧凑,还去掉了一些调试处理,呵呵)
当时解这道题时,我的确花了不少时间,但楼主那老头子居然一分都没给
太伤我心了.
解题思想我已经大概了解部份,但是其实我自己也没看清楚其中的代码内容
因为其中有一个原因:
本来很多数据处理,都应该使用一大堆的 IF 条件的,
但因为个人比较喜欢表达式,而且为了代码的好看,所以
我就把 IF 条件紧缩为一行表达式,
至于能不能提高运行速度,我没有研究,估计多少会有点帮助的
因为它省略了很多的内存比较计算与地址处理,只计算结果就可以了.
所以有很多这样的内容: I=((I+1)mod 9)*9+.......
按照平常人的正规方式应该是这样子的:
if i=...then
i1=....
if i1=....then......
只有变态如我,才会做得出这样子的事情.当年也很是让fw看不惯的
(说起fw,很让我羡慕,估计已经有一番成就了,早已超越我QB的阶段了)
另外还有一个堆栈的问题:
现在的语言里估计已经再也没有像QB这样的限制了,
但无论什么问题上,总会有相似的地方,能更好更快的当然要学习.
平常解决问题,无论教材与微软本身,都会建议我们使用堆栈,
效率更高,速度更快,更好的利用代码重用,使得整体易用与维护性能高.
QB的堆栈限制太多,内存利用太小,容易溢出.(只此一个问题)
这也是堆栈的一个缺点,因为堆栈需要保存东西太多:
进出口地址,寄存器状态,中间变量的内容与地址
一旦递归调用的次数过多的时候,将会产生雪崩效应.
(当然,现在的语言环境应该很少了,而且我还没到那个高度)
所以w12说的算法是有道理的,递归本身是一个很有效的方法.
至于我做的很多程序里,我都避免使用过多的递归,
是因为QB的限制,导致连问题都无法解决,怎么办?
从快速排序开始,我就利用字符串或者是数组来变通使用了,
既然递归的要求,只要变量内容状态就行了,
那何不把那些出入口之类的空间省下来呢?
于是我便有了"利用数组代替递归"一贴.
其实我相信速度与效率相差无几,甚至比递归更省保存状态一个环节
但在理解方面与使用方便方面,是没有递归那么好理解与好用.
唯一遗憾的是,论坛上依然有很多我长期无法解决的问题
(我曾经有一个海口:"怎么可能有别人能解而我不能解的题?")
个人文化水平低,是一个原因,经济生活工作环境条件也是一个原因.
没能进入技术领域,是我一生的遗憾.
各人有各命有各运,能生活下去就好了,没必要在乎什么.
8 楼
强强 [专家分:4740] 发布于 2007-02-22 11:18:00
哈哈哈哈,首先一点我比MOZ小,在这里应该叫声老兄。其次,MOZ是够惨,这么一个程序连一分都没得到,哎。其实不是想让你解释你的程序,只是想知道一下你的大概的算法,我想肯定不是穷举,要不然速不会这么快,在我的K62-338(本来是300超频了38MHZ)上不到一秒种时间解出来一个数独,再有MOZ能否把你的程序改成可以自己输入数字解出来,我好留着用来骗骗女孩子,哈哈,自己都汗~~,你的代码我没研究,看了一点头就大了,不过我确实运行了,再有在你的程序里出现的“\”是什么意思,我知道“/”是除,这个符号是什么,你只要告诉我大概的思路,我也想试着写一下解数独的程序。呵呵,我数学不好,在学校学了点高数还是补考及格的,现在也都就饭吃了,现在真好后悔,要是能回到从前多好,我一定狂追我喜欢的女孩子,哈哈……N……哈!!
9 楼
moz [专家分:37620] 发布于 2007-02-22 12:27:00
自定义输入也就是改动 a$(0) 的内容就行了,81个字符,别弄多了.
追女孩子? 骗女孩子? 用程序? 那我.........哪去了? 我还没有初恋呢.
(说笑罢了,追女孩子大概有两种方式,一用心,二用哄,但没听说过用程序的)
\ 是整除号,得数为去掉小数后面的整数.
我用的也是穷举,至于怎么穷举......我研究一下......唉,你杀了我吧.
10 楼
强强 [专家分:4740] 发布于 2007-02-22 16:24:00
受教了,谢谢
我来回复