fork(2) download
//
//  main.c
//  Test2
//
//  Created by lianhua on 2014/9/20.
//  Copyright (c) 2014年 lianhua. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

void binary(int N, const int n, int *b_vec)
{
    int *ptr ;
    int i ;
    ptr = (int*)malloc(sizeof(int)*n);
    for(i = 1; i <= n ; i++){
        ptr[n-i] = N%2 ;
        N = N/2;
    }
    for(i = 0; i < n; ++i){
        b_vec[i]=ptr[i];
    }
    free(ptr) ;
}

void vectorM(int vec[], const int n, int m, int DM[n][m]){
    int i,j;
    int Coding_array[n] ;
    for(j = 0; j < m; j++){
        binary(vec[j],n,Coding_array);
        for(i = 0; i<n; i++){
            int *ptr = Coding_array;
            DM[i][j] = 2*ptr[i]-1;
        }
    }
}

void Ltri1(const int m, int Matrix[m][m]){
    int i, j ;
    for(i = 0; i < m; i++){
        for(j = 0; j < m; j++){
            if(i <= j){
                Matrix[i][j] = 0;
            }else{
                Matrix[i][j] = 1;
            }
        }
    }
}

void TransM(const int m, const int n, int Mi[][m], int Mo[][m]){
    int h, i, j ;
    for(i = 0; i<m;i++){
        for(j = 0; j<m; j++){
            Mo[i][j] = 0 ;
            for(h = 0; h<n; h++){
                Mo[i][j] += Mi[h][i]*Mi[h][j];
            }
        }
    }
}


static int n_step(int n)
{
    if (n <= 1) return 1;
    return n * n_step(n - 1);
}

double Es2(const int n, const int m, int vec[]){
    int i, j;
    int k = 0;
    float a,b ;
    int DM[n][m] ;
    int TM[m][m] ;
    int SM[m][m] ;
    int VL[m][m] ;
    vectorM(vec,n,m,DM);
    Ltri1(m,TM);
    TransM(m,n,DM,SM) ;
    for(i = 0; i<m;i++){
        for(j = 0; j<m; j++){
            VL[i][j] = 0 ;
            VL[i][j] = SM[i][j]*TM[i][j];
        }
    }
    for(i = 0; i<m;i++){
        for(j = 0; j<m; j++){
            k = k+(VL[i][j]*VL[i][j]);
        }
    }
    b = (n_step(m)/(n_step(2)*n_step(m-2))) ;
    a = k/b ;
    return a;
}

int find_index(int vec[], int a){
    int j = 0;
    while(vec[j]!=a){
        j++;
    }
    return j;
}

int find_indexf(float vec[],float a){
    int j = 0;
    while(vec[j]!=a){
        j++;
    }
    return j;
}


void array_delete(int vec[], int m, int b){
    int j;
    for(j = b; j< m-1;j++){
        vec[j] = vec[j+1];
    }
}

void array_insert(int vec[], int m, int p, int value){
    int j ;
    for(j = m-1; j>p; j--){
        vec[j+1] = vec[j];
    }
    vec[p] = value;
}

void Delcol(const int n, const int m ,int vec[]){
    int i, j;
    int DM[n][m] ;
    int TM[m][m] ;
    int SM[m][m] ;
    int delta_s2[m] ;
    vectorM(vec,n,m,DM);
    Ltri1(m,TM);
    TransM(m,n,DM,SM) ;
    for(i = 0; i<m;i++){
        for(j = 0; j<m; j++){
            if(SM[i][j]==n) SM[i][j] = 0 ;
            else SM[i][j] = SM[i][j];
        }
    }
    for(i = 0; i < m;i++){
        int sum = 0;
        for(j = 0; j<m; j++){
            sum += SM[i][j]*SM[i][j] ;
        }
        delta_s2[i] = sum ;
    }
    int max = delta_s2[0] ;
    for(i = 0; i < m;i++){
        if(delta_s2[i] > max) max = delta_s2[i];
    }
    int idx = find_index(delta_s2,max);
    array_delete(vec,m,idx);
}

void addcol(int vec_old[], int vec_ch[], int m, const int n, int rLB, int k){
    int h, i, j ;
    m = m-rLB+k;
    int m_star = rLB-k ;
    for(i = 0; i<m;i++){
        int idx ;
        idx = find_index(vec_ch,vec_old[i]);
        array_delete(vec_ch,m,idx);
    }
    int DM1[n][m] ;
    vectorM(vec_old,n,m,DM1);
    int DM2[n][m_star] ;
    vectorM(vec_ch,n,m_star,DM2);
    int Mo[m][m_star] ;
    for(i = 0; i<m;i++){
        for(j = 0; j<m_star; j++){
            Mo[i][j] = 0 ;
            for(h = 0; h<n; h++){
                Mo[i][j] += DM1[h][i]*DM2[h][j];
            }
        }
    }
    int delta_s2[m_star];
    for(i = 0; i < m_star;i++){
        int sum = 0;
        for(j = 0; j<m; j++){
            sum += Mo[j][i]*Mo[j][i] ;
        }
        delta_s2[i] = sum ;
    }
    int min = delta_s2[0] ;
    for(i = 0; i < m_star;i++){
        if(delta_s2[i] < min) min = delta_s2[i];
    }
    int idx = find_index(delta_s2,min);
    array_insert(vec_old,m,m,vec_ch[idx]);
}


int main(int argc, char *argv[])
{
    
    int i;
    int m = 6 ;
    int n = 4 ;
    int rLB = 3;
    int vec_old[3] = {6,12,5};
    int vec_ch[6] = {10,9,3,6,12,5};
    for(i = 0; i<rLB; i++) addcol(vec_old, vec_ch, m, n, rLB, i);
    printf("%3d",vec_old);
    printf("\n");

    
}
Runtime error #stdin #stdout 0s 2432KB
stdin
Standard input is empty
stdout
-1079307764