Matrizes esparsas, produto por escalar e produto por um vetor
Publicado por Daniel Moreira dos Santos (última atualização em 01/09/2009)
[ Hits: 10.730 ]
Homepage: http://www.danielmoreira.wordpress.com
Matriz esparsa é uma matriz que possui muitos zeros. Portanto, por quê guardar tantos zeros na memória? Neste script mostro uma maneira eficiente de armazenar uma matriz esparsa e como fazer algumas operações com ela.
//Somente o arquivo esparsa.c #include <stdio.h> #include <stdlib.h> #include "esparsa.h" struct esparsa{ int *idx_row; int *idx_col; int lin; int col; int nnz; float *valor; }; Esparsa* cria(int m, int n){ Esparsa *A=(Esparsa*)malloc(sizeof(Esparsa)); A->lin=m; A->col=n; A->nnz=0; return (A); } Esparsa* ler(Esparsa *A){ FILE *p; int i, nnn, r, c; float v; p=fopen("esparsas.txt", "r"); if(!p){ printf("Erro de abertura de arquivo!"); exit(1); } fscanf(p, "%d", &nnn); A->nnz=nnn; A->idx_row=(int*)malloc(nnn*sizeof(int)); A->idx_col=(int*)malloc(nnn*sizeof(int)); A->valor=(float*)malloc(nnn*sizeof(float)); for(i=0; i<nnn; i++){ fscanf(p, "%d\t%d\t%f", &r, &c, &v); A->idx_row[i]=r; A->idx_col[i]=c; A->valor[i]=v; } return(A); } Esparsa* prod_pesc(Esparsa *A, float x){ int i; for(i=0; i<(A->nnz); i++){ A->valor[i]=x*(A->valor[i]); } return(A); } float* produto(Esparsa *A, float *vetor, int nlv){ float *prod; int i; if(A->col!=nlv){ printf("Dimensoes Imcompativeis."); exit(1); } prod=(float*)malloc(nlv*sizeof(float)); for(i=0; i<nlv; i++){ prod[i]=0; } for(i=0; i<(A->nnz); i++){ prod[A->idx_row[i]]=prod[A->idx_row[i]] + (A->valor[i]*vetor[A->idx_col[i]]); } return (prod); } void imprime(Esparsa *A){ int i; printf("Linha\tColuna\tElemento\n"); for(i=0; i<(A->nnz); i++){ printf("%d\t%d\t%f\n", A->idx_row[i], A->idx_col[i], A->valor[i]); } }
Jogo da Velha contra o Computador.
Shadow Mapping utilizando OpenGL e Cg
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
VMs e Interfaces de Rede desapareceram (12)
Instalação do drive do adaptador wiffi (7)