저는 a [i] [j]라는 배열을 가지고 있습니다. 요소는 char이며 집합 {1, ..., 8}의 하위 집합으로 해석됩니다 (k 번째 비트가 1이면 요소 k가 하위 집합에 있음). 나는 그것이 적절하다고 생각하지 않지만, 모든 요소는 정확히 4 비트가 설정되어있다.순열까지 서브 세트의 컬렉션을 비교하십시오.
모든 행 a [1] [j] .. a [n] [j]는 {1, ..., 8}의 부분 집합입니다. {1, ..., 8}의 순열에 의해 다른 행을 얻을 수있는 경우 두 행이 중복으로 간주되는 중복 행을 제거해야합니다.
예 (0bxxxxxxxx는 이진수를 의미한다) 전자는 전치
8->8, 7->7, 6->1, 5->4, 4->3, 3->2, 2->5, 1->6
적용하여 후자로부터 획득 될 수 있기 때문에
0b11000000, 0b01100000, 0b00110000
는
0b00110000, 0b00011000, 0b00100100
의 중복 결과를 재정렬하는 것.
성능을 고려하여 배열에는 약 20 개의 요소로 구성된 약 2000 개의 행이 포함되어 있습니다. 각 행은 이미 순서가 정해져 있으며, 행이 사전 순으로 늘어나는 순서로되어있어 도움이 될 수 있습니다. 나머지 알고리즘은 C로 작성되었으므로 C 솔루션이 선호됩니다.
도움 주셔서 감사합니다.
그래프 teory에서 이것은 4-uniform hypergraphs의 동형 이성 문제입니다. 문제를 bruteforcing에 적합하게 만들 수있는 몇 가지 ad-hoc 단순화를 관리했지만 여전히 일반적인 일반 알고리즘에 대해 궁금합니다. – user175348