입자를 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는 행렬에서의 형식 좌표를 저장하려고.
비정상적으로 희박한 행렬에는 기본 구조가 있으므로 인덱싱이 매우 간단합니다. 그러나이 경우에는 셀을 인덱싱하는 방법을 알아 내는데 어려움이 있습니다. 나는 당신의 도움 감사하겠습니다
는
안녕하세요. 도움을 주셔서 감사합니다. 해시 테이블은 매우 편리해 보입니다. 불행히도 나는 'key1 = I key2 = J value = val'과 같은 것을 필요로하는 2 개의 키를 사용하여 하나를 찾을 수 없다. 또 다른 문제점은 특정 IJ 쌍이 이미 저장되어있는 경우에만 증가되어야한다는 것입니다. 이 속성을 사용하여 has 테이블을 코딩 할 수 있습니까? –
@AlexanderCska 첫 번째 질문에 대해서는 확실히. 문자열은 여러 개의 문자로 구성됩니다. 그들은 항상 해시되었습니다. 두 개의 인덱스를 연결하거나 인터리브하여 키를 만듭니다. 미안하지만 두 번째 질문을 이해할 수 없습니다. – Gene
처음 부분에 대해서, 내가 올바르게 이해한다면, 나는 문자 버퍼에 'I J'를 써서 해시 키로 사용해야한다. 내 질문의 두 번째 부분에 관해서. 나는 가치를 누적하고있다. 내가 반복 1에 있고 내 코드가'M (i, J)'을 생성한다면 나는 그 값을 저장하게 될 것이다. 내가 반복 2에 있고 똑같은'I, J'가 생성된다면, 나는'M (I, J) = M (I, J) + 1' 값을 증가시키고 싶습니다. 그렇게 할 수 있습니까? –