2014-07-12 1 views
0

입자를 3D 격자로 추적 중입니다. 각 격자 소자 인덱스가 펼쳐진 차원 어레이대형 스파 스 배열을 효율적으로 저장하는 방법

S = x + WIDTH * (y + DEPTH * z) 

I는 S2를 셀에 전이 형태 셀 S1에 관심에 대응하는 라벨링된다. 입자가 세포 근처에서만 도달 할 수 있기 때문에 결과 전이 행렬 M (S1, S2)은 희박하게 채워집니다. 안타깝게도 전개 된 3D 배열의 색인을 사용하면 기하학적으로 가까운 셀이 색인에 큰 차이를 줄 수 있습니다. 예를 들어, 서로 위에 놓여있는 셀 (예 : z 및 z + 1)의 인덱스는 WIDTH * DEPTH만큼 이동합니다. 따라서 결과로 얻는 2D 행렬 M (S1, S2)을 누적하려고하면 S1과 S2가 매우 달라집니다. 셀이 인접 해 있어도 마찬가지입니다. 이는 일반적인 스파 스 매트릭스 스토리지를 사용할 수 없기 때문에 중요한 문제입니다.

I , J VALUE 

불행히도 I 루프 적절한 S1, S2를 찾아 축적 M (S1, S2)를 저장하도록 설정 전체 인덱스를 필요 : 시작시

는 I는 행렬에서의 형식 좌표를 저장하려고.

비정상적으로 희박한 행렬에는 기본 구조가 있으므로 인덱싱이 매우 간단합니다. 그러나이 경우에는 셀을 인덱싱하는 방법을 알아 내는데 어려움이 있습니다. 나는 당신의 도움 감사하겠습니다

답변

1

여러 가지 방법이 있습니다, 사전에 감사합니다. 매트릭스에서 수행해야하는 작업에 따라 최적입니다.

좋은 일반적인 목적은 키가 인덱스 튜플 인 경우 (i, j) 해시 테이블을 사용하는 것입니다.

인접한 (유클리드 감각으로) 행렬 요소를 발견 할 수 있어야한다면 대체 전략은 모턴 주문 키가있는 균형 잡힌 트리입니다. 키 (i, j)의 Morton 순서 값은 비트가 인터리브 된 정수 i와 j입니다. 인덱스 2- 공간에서 서로 가까운 인덱스 튜플이 선형 모턴 (Morton) 순서로 가깝다는 것을 빨리 확인해야합니다.

물론 매트릭스를 모두 한꺼번에 작성한 후에 불변 인 경우 해시 테이블이나 균형 트리가 아닌 배열에 키 - 값 쌍을 작성하고 정렬 할 수 있습니다 (사전 식으로 (i, j) 쌍과 모턴 (Morton) 키들에 대해 선형 적으로) 그리고 간단한 바이너리 검색으로 읽습니다.

+0

안녕하세요. 도움을 주셔서 감사합니다. 해시 테이블은 매우 편리해 보입니다. 불행히도 나는 'key1 = I key2 = J value = val'과 같은 것을 필요로하는 2 개의 키를 사용하여 하나를 찾을 수 없다. 또 다른 문제점은 특정 IJ 쌍이 이미 저장되어있는 경우에만 증가되어야한다는 것입니다. 이 속성을 사용하여 has 테이블을 코딩 할 수 있습니까? –

+0

@AlexanderCska 첫 번째 질문에 대해서는 확실히. 문자열은 여러 개의 문자로 구성됩니다. 그들은 항상 해시되었습니다. 두 개의 인덱스를 연결하거나 인터리브하여 키를 만듭니다. 미안하지만 두 번째 질문을 이해할 수 없습니다. – Gene

+0

처음 부분에 대해서, 내가 올바르게 이해한다면, 나는 문자 버퍼에 'I J'를 써서 해시 키로 사용해야한다. 내 질문의 두 번째 부분에 관해서. 나는 가치를 누적하고있다. 내가 반복 1에 있고 내 코드가'M (i, J)'을 생성한다면 나는 그 값을 저장하게 될 것이다. 내가 반복 2에 있고 똑같은'I, J'가 생성된다면, 나는'M (I, J) = M (I, J) + 1' 값을 증가시키고 싶습니다. 그렇게 할 수 있습니까? –