Thursday, August 29, 2013

A Simple program to transpose a sparse matrix using fast transpose method

/*
Fast transpose of Sparse Matrix in C
As its name suggests, it is a faster way to transpose a sparse and also a little bit hard to understand. Time complexity is O(Number of columns + Number of terms ). Here, we require 2 arrays, namely, count and position.

Count array mainly stores the values of columns present in sparse matrix.
Eg. If we have conventional matrix of size [3 x 4], then our count array will be {0,1,2,3,4}


Position array stores the position of the first occurrence of the values present in column of sparse. It is later incremented in the program.
*/

#include<stdio.h>
#include<stdlib.h>
int r,c1;

void accept(int a1[10][10])
{
     int i,j;
     printf("Enter the Rows and Columns of matrix\n");
     scanf("%d%d",&r,&c1);
     printf("Enter the element\n");
     for (i=0;i<r;i++)
     {
for (j=0;j<c1;j++)
{
    scanf("%d",&a1[i][j]);
}
     }
}

void display(int a1[10][10],int r,int c)
{
     int i,j;
     for (i=0;i<r;i++)
     {
for (j=0;j<c;j++)
{
    printf("%d\t",a1[i][j]);
}
printf("\n");
     }
}

void convert (int a[10][10],int b[10][10],int r,int c)
{
     int i,j,k=1;
     for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(a[i][j]!=0)
{
b[k][0]=i;
b[k][1]=j;
b[k][2]=a[i][j];
k++;
}
}
}
b[0][0]=r;
b[0][1]=c;
b[0][2]=k-1;
}

void fast(int B[10][10],int C[10][10])
{
     int i,j,m,n,pos[3]={0,0,0},count[3]={0,0,0};
     for (i=1;i<=B[0][2];i++)
    {
m = B[i][1];
count[m]++;
    }
    pos[0] = 1;
    for (i=1;i<B[0][1];i++)
    {
pos[i] = pos [i-1] + count[i-1];
    }
    for (i=1;i<=B[0][2];i++)
    {
m = B[i][1];
n= pos[m];
pos[m]++;
C[n][0] = B[i][1];
C[n][1] = B[i][0];
C[n][2] = B[i][2];
    }
    C[0][0] = B[0][0];
    C[0][1] = B[0][1];
    C[0][2] = B[0][2];
}

int main()
{
     system("clear");
     int a[10][10], b[10][10], c[10][10], d[10][10], e[10][10];
      accept(a);
      printf("The conventional matrix is \n");
      display(a,r,c1);
      convert(a,b,r,c1);
      printf("The sparse matrix is \n");
      display(b,b[0][2]+1,3);
      fast(b,c);
      printf("The transpose of sparse matrix is\n");
      display(c,c[0][2]+1,3);
}

7 comments:

  1. the value of the no of row and column in transpose matrix should be exchanged

    ReplyDelete
  2. we want what is the function for fast transpose matrux

    ReplyDelete
  3. we want what is the function for fast transpose matrux

    ReplyDelete
  4. we want what is the function for fast transpose matrux

    ReplyDelete
  5. we want what is the function for fast transpose matrux

    ReplyDelete
  6. Provide algorithms and description to if possible

    ReplyDelete