2016-10-19 4 views
0

거대한 대칭 대각선 행렬을 가정합니다. 이것을 구현하는 효율적인 방법은 무엇입니까?대칭 대각선 행렬의 표현

내가 생각할 수있는 유일한 방법은 Xij = Xji 인 대칭 속성을 사용하여이 행렬의 크기를 절반으로 줄일 수 있다는 것입니다. 그러나 2D 배열을 사용하여이 행렬을 표현하는 것은 비효율적입니다. 왜냐하면 배열을 사용하여 행렬 크기를 줄일 수 없기 때문입니다.

인접성 목록을 사용하는이 행렬을 나타내는 또 다른 사항은이 행렬을 그래프와 연결하기 때문에 비효율적입니다. 그것은 밀도 그래프 일 것입니다. 그리고 adj 목록의 조작은 제거, 삽입 및 검색과 같은 많은 시간이 걸립니다.

하지만 힙을 사용하는 것은 어떻습니까?

+0

미러링을 처리하기 위해 들쭉날쭉 한 열과 색인이있는 1D 어레이를 사용해보십시오. – user4581301

+0

예. 좋은 옵션입니다. 생각할 수있는 다른 방법이 있습니까? –

+0

당신에게 더 나은 정보를 줄 수있는 정보가 충분하지 않습니다. 의도 한 사용 패턴을 알아야하지만 1D 배열은 적당히 복잡한 인덱싱 수학을 사용해도 많은 달콤한 지점에 도달해야합니다. – user4581301

답변

3

이 행렬 (또는 행렬?)을 사용하여 수행 할 작업을 결정할 때까지 한 가지 답이 없습니다.

저장하고 기억하는 경우 중복 항목을 제외하고 순차적으로 저장하십시오. 그게 전부이기 때문에 코드에 액세스하는 방법을 코드에서 알 수 있습니다.

아마도 더 이상 그럴 필요가 없습니다. 이 경우 저장소를 효율적으로 만들거나 실행하려고합니까? 후자의 경우, 나는 대칭 적이라는 많은 기회를 보지 못합니다 - 곱셈은 값 비싼 것이고 아마도 그것들 모두를 여전히 필요로 할 것입니다. 스토리지 인 경우 대칭 및 대칭 만 취하는 작업으로 자신을 제한하고 있습니까? 굉장히 구체적으로 들린다. 그렇다면 저장중인 부분에 대한 계산 만하면됩니다. 정의에 따라 다른 항목은 대칭이므로 코드를 작성하여 행렬의 해당 부분을 생성하면 완료됩니다.

+0

때때로 우리는 효율적인 스토리지와 효율적인 실행간에 균형을 잡아야한다는 것을 알고 있습니다. 그것을 다루는 행렬은 점들 사이의 거리, 즉 코사인 거리와 같은 거리 메트릭을 유지합니다. 큰 데이터 세트를 다루는 이래로 나는 저장과 실행 사이의 균형을 이루는 효율적인 데이터 구조를 찾아야합니다. –

+0

일반적으로 0-50 %의 범위에서 저축하면 누구도 흥분하지 않습니다 (실제 보수가 90-99.9 % 절약됩니다). 그러나 이것이 시스템을 실현할 수있게 만들면 모든 코드를 작성하여 각 행렬의 모양을 알 수있는 가치가 있다고 말하고 싶습니다. 어쨌든 행렬의 주어진 위치에 의미를 부여하는 것은 조작 코드 일뿐입니다. –

관련 문제