我需要比较许多图表(最多几百万个图表比较),我想知道最快的方法是什么。
图的顶点最多可以有 8 个邻居/边,顶点的值可以是 0 或 1。旋转图仍然是相同的图,每个图都有相同数量的顶点。
图表可能如下所示:
现在,我通过从第一个图中获取一个顶点并将其与第二个图中的每个顶点进行比较来比较图。如果我找到相同的顶点,那么我检查两个顶点的邻居是否相同,然后重复此操作,直到我知道图形是否相同。
这种方法太慢了。在不丢弃肯定不同的图的情况下,比较数千个图与大约一百个顶点需要 40 多秒。
我正在考虑为每个图表计算唯一值,然后只比较值。我试图这样做,但我只设法提出如果相等则图形可能相等的值,如果值不同则图形也不同。
如果我的程序比较这些值,那么它会在大约 2.5 秒内计算所有内容(这仍然太慢)。
将顶点添加到该图并更新边的最佳/最快方法是什么?现在我正在存储这个图,std::map< COORD, Vertex >
因为我认为搜索顶点更容易/更快。
COORD 是游戏板上的顶点位置(顶点的位置与比较图形无关),顶点是:
struct Vertex
{
Player player; // Player is enum, FIRST = 0, SECOND = 1
Vertex* neighbours[8];
};
此图表示 Gomoku 的当前棋盘状态,在棋盘边缘环绕,棋盘大小为 n*n,其中 n 最大为 2^16。
我希望我在写这篇文章时没有犯太多错误。我希望有一个人可以帮助我。