`
liujunsong
  • 浏览: 75421 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

回归搜索中利用特征值减少搜索量(强力推荐)

VB 
阅读更多
[size=medium]我以前曾经用VB写了一个<<华容道解题程序1.0>>,当时限于水平,没有加上图形表示.
最近有点时间,想拿起来继续完善完善.

在生成一个新的状态以后,需要和现在已经有的状态进行比较,以判断是否是已经走过的状态,以确保不走回头路.
原来的代码是这样实现的.
        If SaveState(i).state(1) = NewState(1) And _
            SaveState(i).state(2) = NewState(2) And _
            SaveState(i).state(3) = NewState(3) And _
            SaveState(i).state(4) = NewState(4) And _
            SaveState(i).state(5) = NewState(5) And _
            SaveState(i).state(6) = NewState(6) And _
            SaveState(i).state(7) = NewState(7) And _
            SaveState(i).state(8) = NewState(8) And _
            SaveState(i).state(9) = NewState(9) And _
            SaveState(i).state(10) = NewState(10) Then
          IsExist = True: i = 0: Exit Function
        End If

由于这个比较本身就在一个循环里面,这种大面积比较还是比较费时间的,尽管这点时间现在看来已经很微不足道了.
要提高效率,就得在提高比较速度上下工夫.
晚上我忽然想到,如果把每个状态能够算出一个特征值出来,一样的状态特征值是一样的;而不一样的状态特征值相同的概率也不会太大.这样一来每次只要比较一个特征值就可以了,如果特征值相同,再进行状态的细致比较.
于是乎定义了这样一个特征值函数.
Private Function GetCheckFlag(state() As Long)
    Dim i As Long
    Dim iFlag As Long
    
    GetCheckFlag = 0: iFlag = 0
    For i = 1 To 10
        iFlag = iFlag + state(i) * state(i)
    Next i
    GetCheckFlag = iFlag
End Function

把12个状态值简单的计算了一下平方和.这样就得到一个特征值.
修改以后的比较函数如下:
        '先比较校验码,校验码不同,就不必进行下面的比较了。
        If SaveState(i).checkFlag <> iFlag Then
            GoTo looppos
        End If
        
        If SaveState(i).state(1) = NewState(1) And _
            SaveState(i).state(2) = NewState(2) And _
            SaveState(i).state(3) = NewState(3) And _
            SaveState(i).state(4) = NewState(4) And _
            SaveState(i).state(5) = NewState(5) And _
            SaveState(i).state(6) = NewState(6) And _
            SaveState(i).state(7) = NewState(7) And _
            SaveState(i).state(8) = NewState(8) And _
            SaveState(i).state(9) = NewState(9) And _
            SaveState(i).state(10) = NewState(10) Then
          IsExist = True: i = 0: Exit Function
        End If

通过这种方式,终于提高了速度,初步测算,整体的计算速度提高了5到6倍.
另外终于加上了绘图功能,欢迎下载查看.[/size]
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics