의 우리가 요소의 목록이 있다고 가정 해 봅시다 :큰 순열 집합을 효과적으로 저장하는 방법은 무엇입니까?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
내가 RAM이 목록의 모든 가능한 permutations를 저장하고 싶습니다.
목록이 꽤 길 수 있기 때문에 (10 개 요소 이상),이를 저장하는 데 많은 공간 (계승 N)이 필요합니다.
예를 들어 약 70 바이트의 공간을 소비하고 12 개의 요소가있는 목록이있는 경우 12! * 70 ~ 31 GB
이 필요합니다. 목록에 하나 이상의 요소 만 추가하면 순열을 RAM에 저장하는 것이 불가능해질 수 있습니다.
다음 Erlang 표현보다 메모리에서 모든 순열을 유지하는 데 더 효율적인 표현이 있습니까?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
은 (I는 dog
원자는 원자 테이블에 한 번만 저장 것을 알고 있지만,이 모든 순열의 반복이기 때문에, N 메모리 소요).
어쩌면 이러한 순열은 일종의 바이트 표현으로 저장 될 수 있습니까? (죄송합니다, 저는 바이트와 바이너리로 초보자입니다).
결국, 이는 동일한 요소이지만 다른 방식으로 재 배열됩니다.
아담, 답변에 대한 자세한 정보를 제공해 주시겠습니까? 제한된 지식으로는 행의 모든 고유 목록 요소와 열의 모든 순열을 가진 (DB? Matrix?) 테이블을 가져야한다는 것을 이해합니다. 해당 셀은 특정 목록의 특정 요소 (순열)의 정확한 색인 (장소 번호)을 저장해야합니다. 나는 당신의 대답이 훨씬 더 우아한 해결책을 의미한다고 믿습니다. – skanatek
업데이트 된 게시물보기 요점은 한번에 모든 순열을 결코 완전히 창조하지 않는 것입니다. –
그런 초보자 인 것에 대해 유감스럽게 생각합니다.하지만 내가 제공 한 레코드 구조를 어떻게 사용해야하는지 알지 못합니다. list_a 및 list_b에 무엇을 저장해야합니까? Erlang 목록의 index_a와 index_b는 다른 데이터 유형입니까? – skanatek