如何判斷兩組序列的循環(huán)是否相等?
有一組數(shù)組,我想刪除后面相等的重復(fù)元素旋轉(zhuǎn):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,
解答動(dòng)態(tài)
另一個(gè)想法是利用循環(huán)規(guī)范化的事實(shí)。為了示例:
周期[{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;] 它通過確定最小的條目并在前面旋轉(zhuǎn)來規(guī)范arr的條目。
如果我們將列表元素視為在每個(gè)連續(xù)對(duì)之間具有邊的圖頂點(diǎn)(循環(huán)),那么如果兩個(gè)列表可以映射到具有相同邊的圖,那么這兩個(gè)列表是等價(jià)的。在代碼:
[列表]:=<;#-gt;旋轉(zhuǎn)左[#]]&;/@列表
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
最簡單和最穩(wěn)定的解決方案是通過[arr,Sort[NestList[RotateLeft,?,Length[?]-1]]amp;] 設(shè)計(jì)類似于刪除重復(fù)項(xiàng)的解決方案,但后者只有在您知道沒有重復(fù)項(xiàng)時(shí)才起作用在每個(gè)組。用于例如,對(duì)于
arr={1,2,2},{2,1,2}不起作用; 前一種解決方案總是起作用,但速度較慢。例如,對(duì)于
arr=Table[RandomSample[Range[7]],10^4]; ,平均評(píng)估時(shí)間相差3(0.062秒)。
使用Cy定義軌道索引clicGroup:
orbitIndex=關(guān)聯(lián)[Join@@@MapIndexed[Thread[#-amp;]@GroupOrbits[CyclicGroup[Length@First@@#],#,Permute]]amp;] {{1,2,3,4,5},{4,3,2,5,1}} 重復(fù)元素:
arr2=啊/。3-;、quot;,quot;,quot;,quot;,quot;} 刪除重復(fù)項(xiàng)按[arr3,軌道索引[arr3]] {{Aquot;Bquot;Cquot;Dquot;Equot;,quot;,quot;,quot;,quot;} 刪除重復(fù)項(xiàng)[arr3,orbitIndex[arr3][#]==orbitIndex[arr3][#2]quot;,quot;,quot;,quot;,quot;},{Dquot;Cquot;Bquot;Equot;A";}}- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。