结对编程第18小组对于围棋棋谱搜索的一些想法- Windows Live

结对编程第18小组对于围棋棋谱搜索的一些想法

???? 先说说对SGF棋谱文件的读取和解析。正常的棋谱读取一切顺利,但是有一种特例一开始被我们忽略了,那就是让子的情况,这种情况在所给棋谱库的棋谱中并不少见。比如说棋谱002.sgf,{dy}行AB[pp][pd][dp]标识了让子的信息,黑棋先行了3步,分别是[pp]、[pd]、[dp],然后白棋和黑棋交替进行。{zh1}我们把这种情况加了进去,并且在界面上设置了切换下一步黑白棋颜色的按钮以应对这种特例。由于前些日子刚看完《编程珠玑2》,所以对程序的执行效率我考虑了很多,我的考虑如下:是否可以一次性读取所有文件,即每次打开程序只执行一次棋谱文件的读写操作,这样可以大大减少文件I/O操作所耗费的时间。是否可以把棋谱信息尽量压缩,储存成一个开销很小的数据结构,比如一维数组,这样可以满足一次性读取所有文件的要求。大体算一下,棋谱库中大多数棋谱都能下到200手以后,下满是361手,所以不适合采用稀疏矩阵。如果采用一维数组的话,361×500个棋谱×2个字节的short型变量=大约400K的内存开销,而且数组的下标通过换算直接对应棋子的位置,数组存的正好是对应位置的棋子步数。
??? 其次是我们的匹配算法。除了正常情况我们还考虑了如下几种等同的情况,左右镜像,上下镜像,顺时针或者逆时针旋转90180270度。顺序读取输入中的每一个棋子,分别给位置、棋子颜色设置一个权重,{zh1}遍历整个输入,把不同情况得到的权重存到一个数组里,比较这几种等同情况的匹配结果,权重{zd0}的最匹配。然后把得到的500个权重值快排一下,将排序后的文件名输出到ListBox里面。对于权重的设置,我们是位置优先,对于每个棋子位置对+1,棋子颜色对+1,步数对再+1。
郑重声明:资讯 【结对编程第18小组对于围棋棋谱搜索的一些想法- Windows Live】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——