我正在实施A *算法。任何节点都可以连接到任何其他节点,前提是没有任何阻碍路径的情况,这种情况应该很少。这种方式发现路径通常包含少量节点(甚至可能只有2个),但是从节点移动到节点的选项非常多。在基于网格的A *算法视频中,我听说存储这些距离而不是一遍又一遍地计算它们是个好主意,但这是这种情况吗?节点的位置没有绑定到网格,在我看来,计算距离的字典会变得太大而无法使用(搜索密钥)。不应该有太多的节点(30到500),因此在字典中搜索相应值的499个参考比较需要的时间比每次计算距离要长吗?如果不是 - 这个字典搜索时间对于什么数量的节点很重要? 下面是我使用的类的骨架代码。
class Node
{
private Vector2 position;
public Vector2 Position
{
get
{
return position;
}
set
{
position = value;
calculatedDistances.Clear();
}
}
private Dictionary<Node, float> calculatedDistances;
public float DistanceTo(Node to)
{
float dist;
if (calculatedDistances.TryGetValue(to, out dist))
{
return dist;
}
else
{
dist = Vector2.Distance(this.Position, to.Position);
calculatedDistances.Add(to, dist);
return dist;
}
}
}
答案 0 :(得分:2)
性能特征总是非常依赖于您的实际数据集。您几乎不应该依赖于认为会更快的内容:个人资料个人资料。 C#Stopwatch
类很适合这个目的。
话虽如此,这里有一些关于你案件的想法: