희소 행렬 쾌속 변환 알고리즘 구현
알고리즘 사상
이 문제 에 대해 우 리 는 먼저 y 의 모든 수치 수량 을 통계 할 수 있다. 그 다음 에 우 리 는 모든 y 가 x 로 전 치 된 후에 모든 x 가 몇 개 있 는 지 계산 할 수 있다. 즉, 우 리 는 우리 가 전 치 된 3 원 조 의 시작 위 치 를 알 수 있다.예 를 들 어 우리 가 다음 과 같은 3 원 조 가 있다 고 가정 한다.
//Origin matrix
x | y | value
----------------
1 4 0
1 2 1
1 1 -3
2 3 4
3 4 9
3 3 1
4 1 2
그러면 우 리 는 Y 를 한 번 훑 어 볼 수 있 습 니 다. 1, 2, 3, 4 의 수 는 각각 2, 1, 2, 2 입 니 다.그러면 우리 가 전 치 된 3 원 조 의 배열 은 반드시 이렇다.
x=1 x=2 x=3 x=4
|_ _ | _ |_ _ |_ _
만약 그렇다면 우 리 는 원 행렬 의 모든 3 원 그룹 에 대해 Y 의 수치 에 따라 우리 가 넣 을 위 치 를 찾 을 수 있다 는 것 을 알 수 있다. 즉, x 의 수치 시작 을 가리 키 는 지침 (xStart 배열 기록) 이다.그리고 어떤 포인터 가 가리 키 는 구역 에 한 개의 수 를 넣 을 때마다 포인터 가 한 자 리 를 뒤로 이동 하도록 합 니 다.이렇게 해서 우 리 는 원래 의 행렬 을 한 번 훑 어보 기만 하면 전 치 된 행렬 을 얻 을 수 있다.
코드 구현
내 가 이전에 언급 한 x 를 가리 키 는 서로 다른 값 의 지침 을 어떻게 얻 는 지 에 대해 우 리 는 두 개의 보조 배열 yCount & xStart 가 필요 하 다. 먼저 yCount 를 얻 은 다음 에 yCount 에 따라 xStart 즉 우리 가 원 하 는 지침 을 계산 해 야 한다.
//Origin matrix
/* x | y | value
----------------
1 4 0
1 2 1
1 1 -3
2 3 4
3 4 9
3 3 1
4 1 2
*/
#include
using namespace std;
int yCount[100],xStart[100]; //two extra array
class Node{
public:
Node(){}
int x;
int y;
int value;
};
Node originMat[100];
Node transMat[100];
void getyCount(int n){
for(int i=0;i>n;
cout<>originMat[i].x>>originMat[i].y>>originMat[i].value;
}
fastTransMat(n);
display(n);
}
원본 글 은 제 블 로그 loveSnowBest 's blog 에 올 라 왔 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.