如何判断两组序列的循环是否相等?

2021-02-22 14:30

有一组数组,我想删除后面相等的重复元素旋转:arr={1,2,3,4,5},{2,3,4,5,1},{5,1,2,3,4},{4,3,2,5,1};元素{1,2,3,4,5},{2,3,4,5,

解答动态

  • 另一个想法是利用循环规范化的事实。为了示例:
    周期[{5,1,2,3,4}}] 周期[{1,2,3,4,5}}]
    So,
    DeleteDuplicatesBy[arr,Cycles@*List] {1,2,3,4,5},{4,3,2,5,1}}

    • 可能是
      DeleteDuplicatesBy[arr,Mod[#-#[[1]],5]amp;] 它通过确定最小的条目并在前面旋转来规范arr的条目。

      • 如果我们将列表元素视为在每个连续对之间具有边的图顶点(循环),那么如果两个列表可以映射到具有相同边的图,那么这两个列表是等价的。在代码:
        [列表]:=<;

        • #-gt;旋转左[#]]&;/@列表

          • lt;lt;lt;gt;1},{2、2、3、3、4、3、3、3、3、4、4、4、4、4、4、4、5、5、5、5、5、5、5、5、1}、、、、各各你知道吗,1} -gt;4,2-gt;2,4-gt;1}

            • >;*) 和:
              deleteplicatesby[arr,graphs[arr]](*{1,2,3,4,5},{4,3,2,5,1}*)

              • arr={1,2,3,4,5},{2,3,4,5,1},{5,1,2,3,4},{4,3,2,5,1};DeleteDuplicatesBy[list,Sort[Table[RotateLeft[#,i],{i,1,5}]]&;]//长度 2

                • 最简单和最稳定的解决方案是通过[arr,Sort[NestList[RotateLeft,?,Length[?]-1]]amp;] 设计类似于删除重复项的解决方案,但后者只有在您知道没有重复项时才起作用在每个组。用于例如,对于
                  arr={1,2,2},{2,1,2}不起作用; 前一种解决方案总是起作用,但速度较慢。例如,对于
                  arr=Table[RandomSample[Range[7]],10^4]; ,平均评估时间相差3(0.062秒)。

                  • 使用Cy定义轨道索引clicGroup:
                    orbitIndex=关联[Join@@@MapIndexed[Thread[#-amp;]@GroupOrbits[CyclicGroup[Length@First@@#],#,Permute]]amp;] {{1,2,3,4,5},{4,3,2,5,1}} 重复元素:
                    arr2=啊/。3-;、quot;,quot;,quot;,quot;,quot;} 删除重复项按[arr3,轨道索引[arr3]] {{Aquot;Bquot;Cquot;Dquot;Equot;,quot;,quot;,quot;,quot;} 删除重复项[arr3,orbitIndex[arr3][#]==orbitIndex[arr3][#2]quot;,quot;,quot;,quot;,quot;},{Dquot;Cquot;Bquot;Equot;A";}}

                    • End

                    免责声明:

                    本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。