如何生成一个多叉树?当多叉树要用远远超过系统所能提供的内存的时候怎么办?
我以前想做个具有甲级棋手水平的电脑象棋程序。我经研究发现,决定电脑象棋程序棋力的是棋树搜索的深度和广度,受微机硬件限制,要完全搜索实际要求的深度和广度的棋树需要的时间要很多,而人机对战有严格的时间限制,不能太慢,因此只有缩小搜索深度和广度,结果,程序的棋力不能达到要求,所以,我认为是不可能开发出在目前微机上使用的高水平的人机对战电脑象棋程序的。
我想做一个针对用户提供的棋局的精确求解的解题工具。
我打算用C语言作内核,因为我会C语言,正在学C++,只会用C++做个界面。
我的算法是完全搜索深度为三十层的棋树,加上α-β修剪法。
程序的运作我是这样设想:用户使用鼠标摆好棋子,设置先行方,按下开始运算按钮之后,程序开始生成棋树,估计所需计算时间,搜索棋树,使用非常简单的审局函数,只根据是否将死和子力对比判断棋步的优劣,剪去劣枝,留下优枝,最后提供给用户的是一个最佳棋树,同时还可以根据用要求,列出用户感兴趣的变化。
在这种情况下程序不受时间限制,可以完全采用搜索整个棋树的方法,这时要用很多时间,希望能像网络蚂蚁一样,不主动占用用户太多资源,不打扰用户其它工作,要能“断点续算”,就是工作可以随时停止,随时开始,不受天时地利的影响。
问题一:如何生成一个多叉树,这个支干不是事先能规定的,是根据局面产生可能的步法,产生下一层的树枝。
问题二当多叉树要用远远超过系统所能提供的内存的时候怎么办?
问题三:搜索运算非常庞大复杂,如何做到"断点续算"?
问题四:我发现运算量一大,程序就无响应,如何有效地控制程序的资源占用?我希望它利用用户闲置的资源进行运算,不允许打扰用户其它工作,更不允许出现无响应的情况。
问题五:如何估计线程运算所需的时间。
请各位最好用C语言回答我的问题,C++的也可以。我给分一定不会吝啬。谢谢!
我的邮箱:liuhaixiao1980@163.com