[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]
分享到:
相关推荐
由于对称三对角矩阵的特殊结构,我们可以利用这一性质来加速特征值的查找过程。二分法基于以下原理: - **初始化区间**:选择一个包含所有特征值的闭区间\( [a, b] \)。 - **中间点测试**:在每个步骤中,计算区间...
FEAST(Field-Energy and Space Targeting)是一种用于求解大型稀疏矩阵特征值问题的高效算法,尤其在工程和科学计算中广泛应用。本话题主要关注的是如何在Julia编程语言中实现这一算法。 首先,我们需要理解FEAST...
特征值分解与奇异值分解作为线性代数中的核心概念,在多个领域内扮演着关键角色,尤其是在数据分析与机器学习领域。本文将深入探讨这两种分解方法的基础知识、数学含义及其应用场景。 #### 一、奇异值与特征值基础...
在图像检索领域,多特征值图像检索是一种高效且精准的技术,它主要...总的来说,多特征值图像检索是一个综合了计算机视觉、机器学习和数据库技术的复杂系统,它在图像搜索、内容识别、智能推荐等领域有着广泛的应用。
在IT领域,特别是信号处理和数据分析中,"基于矩阵特征值分解谱分析(如MUSIC方法)"是一种常用的技术,用于估计信号源的数量和方向。矩阵特征值分解是这一过程中的核心工具,它能揭示数据内在的结构和模式。本文将...
在实际应用中,查询条件可综合利用颜色、纹理、形状等内容特征,以及结构特征和描述特征等。一般情况下,表示图像内容的特征集合可看作是高维空间中的一个向量,这样,基于内容的图像检索就转化为高维空间点集的最近...
利用第三方矩阵计算工具包JAMA,求特征值、特征向量 API: http://math.nist.gov/javanumerics/jama/doc/Jama/Matrix.html 应用: 1.JAMA包的导入 1)https://mvnrepository.com/ 2)搜索JAMA,选第一个:gov....
在特征值估计的上下文中,适应度函数将被用来衡量粒子群中个体的位置(即假设的特征值)与真实特征值之间的接近程度。算法通过最小化适应度函数来寻找特征值,适应度函数通常会根据问题的需要来定义,例如可以使用...
矩阵的特征值和特征向量是线性代数中极具魅力且应用广泛的数学概念,它们不仅构成了矩阵理论的核心部分,而且在诸多学科领域中扮演着关键角色。在深入探索这些概念的内涵之前,我们首先需要明确其定义、性质、计算...
标题中的“电信设备-基于图像帧数据特征值信息响应的内容搜索方法及系统”是指一种针对电信设备中的多媒体数据,特别是图像帧数据,进行高效检索的技术。这种方法利用图像帧的特征值信息来构建索引,从而实现对内容...
例如,PageRank算法,用于确定网页在搜索引擎中的排名,就利用了矩阵特征值的概念,通过迭代计算得出每个网页的重要性得分。 总的来说,理解并熟练掌握矩阵特征值与特征向量的计算方法是数值计算和相关领域研究的...
本文将详细介绍如何利用Java编程语言来计算矩阵的特征值和特征向量,并具体探讨这些技术在AHP(Analytic Hierarchy Process,层次分析法)中的应用。 #### 二、特征值与特征向量的基本概念 **1. 定义** - **特征...
在IT领域,特别是信号处理和数据分析中,"基于矩阵特征值分解谱分析(如MUSIC方法)"是一种常用的技术,用于估计信号源的数量和方向。矩阵特征值分解是这一过程中的核心工具,它能揭示数据内在的结构和模式。本文将...
在IT行业中,特征码搜索是一种常见的技术,尤其在软件逆向工程、病毒检测以及调试工具中广泛应用。C++作为一款强大的编程语言,被广泛用于开发这类工具。标题"‘C++ 特征码搜索支持问号搜索 开源’"表明我们讨论的是...
该方法借鉴了量子计算的原理,特别是Grover量子搜索算法,但同时利用了弱值放大技术,使得在光学环境中实现快速搜索成为可能。 1. **Grover量子搜索算法的背景**: - 量子计算机基于量子力学原理,能进行量子并行...
在Android中,开发者可以通过BluetoothGatt类和相关的API来实现蓝牙4.0的搜索、配对、连接、发现服务及特征值以及断开连接等功能。 首先,为了搜索和配对蓝牙设备,开发者可以使用`BluetoothAdapter`类。`...
在Java中实现Logistic回归算法,我们需要理解其基本原理、步骤以及如何利用Java编程语言来构建模型。 1. **Logistic回归的基本原理** Logistic回归的核心是将线性回归的结果通过一个非线性的函数(Logistic函数,...