首页 新闻 会员 周边 捐助

离散最大似然解码运行不能,似乎是栈的问题

0
[已解决问题] 解决于 2015-11-16 16:02

离散的程序作业,因为二维的传到函数里比较麻烦,就写在主函数里了,求不要介意。现在程序不知道为什么连main都进入不了,用CB和VS都是直接崩,实在不懂哪里的问题。谢谢~

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 
 5 #define N 1000
 6 
 7 int main(){
 8     int HOctHalf[N][N];
 9     int m,n;
10     scanf(" %d%d",&m,&n);
11     for(int i = 1;i <= m;i++){
12         for(int j = 1;j <= n-m;j++){
13             scanf(" %d",&HOctHalf[i][j]);
14         }
15     }
16     /*
17     int pow;
18     int HDecHalf[N];
19     for(int j = 1;j <= n-m;j++){
20         pow = 1;
21         HDecHalf[j] = 0;
22         for(int i = m;i <= n-m;i++){
23             HDecHalf[j] += pow*HOctHalf[i][j];
24             pow *= 2;
25         }
26     }
27     */
28     int code[N][N];
29     int temp;
30     for(int i = 0;i <= (int)pow(2,m);i++){
31         temp = i;
32         for(int j = m;j >= 1;j++){
33             code[i][j] = temp%2;
34             temp /= 2;
35         }
36     }
37 
38     int codeWord[N][N];
39     for(int i = 0;i <= (int)pow(2,m);i++){
40         for(int j = 1;j <= m;j++){
41             codeWord[i][j] = code[i][j];
42         }
43     }
44 
45     for(int i = 0;i <= (int)pow(2,m);i++){
46         for(int j = 1;j <= n-m;j++){
47             codeWord[i][j+m] = 0;
48             for(int k = 1;k <= m;k++){
49                 codeWord[i][j+m] += code[i][k]*HOctHalf[k][j];
50             }
51             codeWord[i][j+m] %= 2;
52         }
53     }
54 
55 
56 
57     int decode[N];
58     for(int i = 1;i <= n;i++)
59         scanf("%d",&decode[i]);
60 
61     int cnt[N];
62     for(int i = 0;i <= (int)pow(2,m);i++){
63         for(int j = 1;j <= n;j++){
64             if((decode[j]^codeWord[i][j]) == 1)
65                 cnt[i]++;
66         }
67     }
68 
69     int min = cnt[0],minRpos = 0;
70     for(int i = 1;i <= (int)pow(2,m);i++){
71         if(min < cnt[i]){
72             min = cnt[i];
73             minRpos = i;
74         }
75     }
76 
77     for(int i = 1;i <= m;i++)
78         printf("%d",code[minRpos][i]);
79     printf("\n");
80 
81     return 0;
82 }
sean10的主页 sean10 | 菜鸟二级 | 园豆:206
提问于:2015-11-16 14:20
< >
分享
最佳答案
0

栈一般是1M,这里超出栈的大小了。

sean10 | 菜鸟二级 |园豆:206 | 2015-11-16 16:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册