[데이터 구조의 여행] 희소 행렬 의 빠 른 전환
3252 단어 C 언어데이터 구조희소 행렬데이터 구조 와 알고리즘
희소 행렬 의 빠 른 전환 알고리즘 의 핵심 은 하나의 배열 num 으로 원래 행렬 의 각 열 에 0 원 이 아 닌 개 수 를 기록 하고 다른 배열 cpos 로 원 행렬 의 첫 번 째 비 0 원 이 새 행렬 에 있 는 위 치 를 기록 하여 빠 른 전환 의 목적 을 달성 하 는 것 이다.
이런 방법 으로 주로 희망 이다. 행렬 이 전 환 된 후에 도 저장 순 서 는 줄 에 따라 저장 된다.
1. 구현 및 코드 설명
위의 핵심 알림 에 따 르 면 다음 과 같은 코드 가 있 을 수 있 습 니 다. 아래 코드 의 주석 은 이미 매우 상세 하기 때문에 모든 부분 이 실현 하 는 기능 을 독립 시 키 지 않 습 니 다.
#include
#include
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define TRUE 2
#define FALSE -2
typedef int ElemType;
typedef int Status;
typedef struct{ //
int i, j; //
ElemType e; //
} Triple; //
typedef struct{ //
Triple *data; //data ,
int mu, nu, tu; // 、
} TSMatrix; //
/*
0 14 0 0 -5
0 -7 0 0 0
36 0 0 28 0
mu = 3; nu = 5; tu = 5
*/
Status CreateSMatrix(TSMatrix &M){ //
M.tu = 5;
M.data = (Triple*)malloc(sizeof(Triple) * (M.tu + 1)); //data 1, data[0]
if(NULL == M.data)
return OVERFLOW;
M.data[1].i = 1;
M.data[1].j = 2;
M.data[1].e = 14;
M.data[2].i = 1;
M.data[2].j = 5;
M.data[2].e = -5;
M.data[3].i = 2;
M.data[3].j = 2;
M.data[3].e = -7;
M.data[4].i = 3;
M.data[4].j = 1;
M.data[4].e = 36;
M.data[5].i = 3;
M.data[5].j = 4;
M.data[5].e = 28;
M.mu = 3;
M.nu = 5;
return OK;
}
Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T){ // , M T
int j, p, q, t;
/*j ,cops[j], (cops[j]++), ;
p , ;
q cops[j], , ;
t 。
*/
int *num; //
int *cpos; // T
//cops[j]++ ,
T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; // T
T.data = (Triple*)malloc(sizeof(Triple)*(T.nu + 1));
num = (int*)malloc((M.nu + 1)*sizeof(int)); //num cpos 1, 0
cpos = (int*)malloc((M.nu + 1)*sizeof(int));
if(num == NULL || cpos == NULL)
return OVERFLOW;
if(T.tu != 0){
for(j = 1; j <= M.nu; j++) // num
num[j] = 0;
for(t = 1;t <= M.tu; t++) // M
num[M.data[t].j]++; // num[1]~num[5], num 0
cpos[1] = 1; //
for(j = 2;j <= M.nu; j++) // T.data
cpos[j] = cpos[j-1] + num[j-1]; //
for(p = 1; p <= M.tu; p++){ // ,
j = M.data[p].j; //j , cops
q = cpos[j]; // , cpos[j]
T.data[q].i = M.data[p].j; //
T.data[q].j = M.data[p].i; //
T.data[q].e = M.data[p].e; // , ,
cpos[j]++; //cops[j]++ , ,
} // for , , j ,cpos[j]
}
free(num);
free(cpos);
return OK;
}
int main(void){
int i,j;
TSMatrix M;
TSMatrix T;
CreateSMatrix(M);
FastTransposeSMatrix(M, T);
printf("
");
return 0;
}
C free 등 컴 파 일 러 로 컴 파 일 러 를 실행 할 수 있 으 나 시간 관계 상 위 코드 에는 전 환 된 매트릭스 로 인쇄 된 코드 가 제시 되 어 있 지 않 아 스스로 추가 할 수 있 으 며, 물론 새로운 매트릭스 T 의 data 필드 의 수치 변 화 를 디 버 깅 하 는 방법 으로 감시 할 수도 있다.
2. 테스트
테스트 는 위의 제시 에 따라 하면 됩 니 다. 시간 관계 입 니 다. 여 기 는 테스트 를 하지 않 고 다음 에 시간 이 있 으 면 다시 보충 합 시다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.