Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环图的对称轴 我必须编写一个C++程序,它返回循环图中对称轴的数目。 当左侧相对顶点或边之间的值是右侧值的镜像时,循环图具有对称轴。 对称轴可能与顶点和边相交_C++_Computer Science_Graph Algorithm_Symmetric - Fatal编程技术网

循环图的对称轴 我必须编写一个C++程序,它返回循环图中对称轴的数目。 当左侧相对顶点或边之间的值是右侧值的镜像时,循环图具有对称轴。 对称轴可能与顶点和边相交

循环图的对称轴 我必须编写一个C++程序,它返回循环图中对称轴的数目。 当左侧相对顶点或边之间的值是右侧值的镜像时,循环图具有对称轴。 对称轴可能与顶点和边相交,c++,computer-science,graph-algorithm,symmetric,C++,Computer Science,Graph Algorithm,Symmetric,例如: 有没有什么方法比O(n^2)更快呢?n.m.的答案实际上几乎是正确的,但无论如何都不正确 让我们将其中一个节点称为起始节点,将经过起始节点的轴称为主轴。 将图形翻转到某个轴上等于将其翻转到主轴上并旋转: 旋转后,主节点可以放置在任何其他节点位置上(我们也总是可以找到当前轴来执行此操作) 如果我们将图形存储为字符串,则翻转的图形由一个反向字符串描述,该字符串循环移位0到N-1个位置。 这些字符串的相等意味着图的相等。显然,这种匹配的数量等于两次重复图形字符串中反向字符串的出现次数:

例如:


有没有什么方法比O(n^2)更快呢?

n.m.的答案实际上几乎是正确的,但无论如何都不正确

让我们将其中一个节点称为起始节点,将经过起始节点的轴称为主轴。 将图形翻转到某个轴上等于将其翻转到主轴上并旋转:

旋转后,主节点可以放置在任何其他节点位置上(我们也总是可以找到当前轴来执行此操作)

如果我们将图形存储为字符串,则翻转的图形由一个反向字符串描述,该字符串循环移位0到N-1个位置。 这些字符串的相等意味着图的相等。显然,这种匹配的数量等于两次重复图形字符串中反向字符串的出现次数:

因此,是的,KMP以O(N)复杂度完成了这个技巧


但是您应该避免str等于reverse(str)的情况,因为匹配将以0和N移位计数,尽管它们描述的是同一个轴。所以,你不应该使用str和它本身的连接,而应该只使用这个连接的第一个(2*N–1)字符,以在任何情况下实现正确的行为。

好吧,我想这个问题太宽泛了,不适合这样做,或者它可能无法给出一个具体的答案。看起来你的图表也被标记了。是这样吗?是的,它是在一个字符数组中输入的。看起来这更适合计算机科学SE。你必须用C++编程,但是听起来你更像一般的算法。<代码> FIDIOSUBIN(反向(STR),CONAT(STR,STR))应该是个好办法。子串搜索是O(n+m),例如KMP算法。