fork(2) download
  1. //
  2. // main.c
  3. // Test2
  4. //
  5. // Created by lianhua on 2014/9/20.
  6. // Copyright (c) 2014年 lianhua. All rights reserved.
  7. //
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <time.h>
  12. #include <math.h>
  13.  
  14. void binary(int N, const int n, int *b_vec)
  15. {
  16. int *ptr ;
  17. int i ;
  18. ptr = (int*)malloc(sizeof(int)*n);
  19. for(i = 1; i <= n ; i++){
  20. ptr[n-i] = N%2 ;
  21. N = N/2;
  22. }
  23. for(i = 0; i < n; ++i){
  24. b_vec[i]=ptr[i];
  25. }
  26. free(ptr) ;
  27. }
  28.  
  29. void vectorM(int vec[], const int n, int m, int DM[n][m]){
  30. int i,j;
  31. int Coding_array[n] ;
  32. for(j = 0; j < m; j++){
  33. binary(vec[j],n,Coding_array);
  34. for(i = 0; i<n; i++){
  35. int *ptr = Coding_array;
  36. DM[i][j] = 2*ptr[i]-1;
  37. }
  38. }
  39. }
  40.  
  41. void Ltri1(const int m, int Matrix[m][m]){
  42. int i, j ;
  43. for(i = 0; i < m; i++){
  44. for(j = 0; j < m; j++){
  45. if(i <= j){
  46. Matrix[i][j] = 0;
  47. }else{
  48. Matrix[i][j] = 1;
  49. }
  50. }
  51. }
  52. }
  53.  
  54. void TransM(const int m, const int n, int Mi[][m], int Mo[][m]){
  55. int h, i, j ;
  56. for(i = 0; i<m;i++){
  57. for(j = 0; j<m; j++){
  58. Mo[i][j] = 0 ;
  59. for(h = 0; h<n; h++){
  60. Mo[i][j] += Mi[h][i]*Mi[h][j];
  61. }
  62. }
  63. }
  64. }
  65.  
  66.  
  67. static int n_step(int n)
  68. {
  69. if (n <= 1) return 1;
  70. return n * n_step(n - 1);
  71. }
  72.  
  73. double Es2(const int n, const int m, int vec[]){
  74. int i, j;
  75. int k = 0;
  76. float a,b ;
  77. int DM[n][m] ;
  78. int TM[m][m] ;
  79. int SM[m][m] ;
  80. int VL[m][m] ;
  81. vectorM(vec,n,m,DM);
  82. Ltri1(m,TM);
  83. TransM(m,n,DM,SM) ;
  84. for(i = 0; i<m;i++){
  85. for(j = 0; j<m; j++){
  86. VL[i][j] = 0 ;
  87. VL[i][j] = SM[i][j]*TM[i][j];
  88. }
  89. }
  90. for(i = 0; i<m;i++){
  91. for(j = 0; j<m; j++){
  92. k = k+(VL[i][j]*VL[i][j]);
  93. }
  94. }
  95. b = (n_step(m)/(n_step(2)*n_step(m-2))) ;
  96. a = k/b ;
  97. return a;
  98. }
  99.  
  100. int find_index(int vec[], int a){
  101. int j = 0;
  102. while(vec[j]!=a){
  103. j++;
  104. }
  105. return j;
  106. }
  107.  
  108. int find_indexf(float vec[],float a){
  109. int j = 0;
  110. while(vec[j]!=a){
  111. j++;
  112. }
  113. return j;
  114. }
  115.  
  116.  
  117. void array_delete(int vec[], int m, int b){
  118. int j;
  119. for(j = b; j< m-1;j++){
  120. vec[j] = vec[j+1];
  121. }
  122. }
  123.  
  124. void array_insert(int vec[], int m, int p, int value){
  125. int j ;
  126. for(j = m-1; j>p; j--){
  127. vec[j+1] = vec[j];
  128. }
  129. vec[p] = value;
  130. }
  131.  
  132. void Delcol(const int n, const int m ,int vec[]){
  133. int i, j;
  134. int DM[n][m] ;
  135. int TM[m][m] ;
  136. int SM[m][m] ;
  137. int delta_s2[m] ;
  138. vectorM(vec,n,m,DM);
  139. Ltri1(m,TM);
  140. TransM(m,n,DM,SM) ;
  141. for(i = 0; i<m;i++){
  142. for(j = 0; j<m; j++){
  143. if(SM[i][j]==n) SM[i][j] = 0 ;
  144. else SM[i][j] = SM[i][j];
  145. }
  146. }
  147. for(i = 0; i < m;i++){
  148. int sum = 0;
  149. for(j = 0; j<m; j++){
  150. sum += SM[i][j]*SM[i][j] ;
  151. }
  152. delta_s2[i] = sum ;
  153. }
  154. int max = delta_s2[0] ;
  155. for(i = 0; i < m;i++){
  156. if(delta_s2[i] > max) max = delta_s2[i];
  157. }
  158. int idx = find_index(delta_s2,max);
  159. array_delete(vec,m,idx);
  160. }
  161.  
  162. void addcol(int vec_old[], int vec_ch[], int m, const int n, int rLB, int k){
  163. int h, i, j ;
  164. m = m-rLB+k;
  165. int m_star = rLB-k ;
  166. for(i = 0; i<m;i++){
  167. int idx ;
  168. idx = find_index(vec_ch,vec_old[i]);
  169. array_delete(vec_ch,m,idx);
  170. }
  171. int DM1[n][m] ;
  172. vectorM(vec_old,n,m,DM1);
  173. int DM2[n][m_star] ;
  174. vectorM(vec_ch,n,m_star,DM2);
  175. int Mo[m][m_star] ;
  176. for(i = 0; i<m;i++){
  177. for(j = 0; j<m_star; j++){
  178. Mo[i][j] = 0 ;
  179. for(h = 0; h<n; h++){
  180. Mo[i][j] += DM1[h][i]*DM2[h][j];
  181. }
  182. }
  183. }
  184. int delta_s2[m_star];
  185. for(i = 0; i < m_star;i++){
  186. int sum = 0;
  187. for(j = 0; j<m; j++){
  188. sum += Mo[j][i]*Mo[j][i] ;
  189. }
  190. delta_s2[i] = sum ;
  191. }
  192. int min = delta_s2[0] ;
  193. for(i = 0; i < m_star;i++){
  194. if(delta_s2[i] < min) min = delta_s2[i];
  195. }
  196. int idx = find_index(delta_s2,min);
  197. array_insert(vec_old,m,m,vec_ch[idx]);
  198. }
  199.  
  200.  
  201. int main(int argc, char *argv[])
  202. {
  203.  
  204. int i;
  205. int m = 6 ;
  206. int n = 4 ;
  207. int rLB = 3;
  208. int vec_old[3] = {6,12,5};
  209. int vec_ch[6] = {10,9,3,6,12,5};
  210. for(i = 0; i<rLB; i++) addcol(vec_old, vec_ch, m, n, rLB, i);
  211. printf("%3d",vec_old);
  212. printf("\n");
  213.  
  214.  
  215. }
  216.  
Runtime error #stdin #stdout 0s 2432KB
stdin
Standard input is empty
stdout
-1079307764