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

C语言 码拜 9年前 (2015-11-16) 850次浏览
离散的程序作业,原因是二维的传到函数里比较麻烦,就写在主函数里了,求不要介意。现在程序不知道为什么连main都进入不了,用CB和VS都是直接崩,实在不懂哪里的问题。谢谢~

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 1000
int main(){
    int HOctHalf[N][N];
    int m,n;
    scanf(" %d%d",&m,&n);
    for(int i = 1;i <= m;i++){
        for(int j = 1;j <= n-m;j++){
            scanf(" %d",&HOctHalf[i][j]);
        }
    }
    /*
    int pow;
    int HDecHalf[N];
    for(int j = 1;j <= n-m;j++){
        pow = 1;
        HDecHalf[j] = 0;
        for(int i = m;i <= n-m;i++){
            HDecHalf[j] += pow*HOctHalf[i][j];
            pow *= 2;
        }
    }
    */
    int code[N][N];
    int temp;
    for(int i = 0;i <= (int)pow(2,m);i++){
        temp = i;
        for(int j = m;j >= 1;j++){
            code[i][j] = temp%2;
            temp /= 2;
        }
    }
    int codeWord[N][N];
    for(int i = 0;i <= (int)pow(2,m);i++){
        for(int j = 1;j <= m;j++){
            codeWord[i][j] = code[i][j];
        }
    }
    for(int i = 0;i <= (int)pow(2,m);i++){
        for(int j = 1;j <= n-m;j++){
            codeWord[i][j+m] = 0;
            for(int k = 1;k <= m;k++){
                codeWord[i][j+m] += code[i][k]*HOctHalf[k][j];
            }
            codeWord[i][j+m] %= 2;
        }
    }
    int decode[N];
    for(int i = 1;i <= n;i++)
        scanf("%d",&decode[i]);
    int cnt[N];
    for(int i = 0;i <= (int)pow(2,m);i++){
        for(int j = 1;j <= n;j++){
            if((decode[j]^codeWord[i][j]) == 1)
                cnt[i]++;
        }
    }
    int min = cnt[0],minRpos = 0;
    for(int i = 1;i <= (int)pow(2,m);i++){
        if(min < cnt[i]){
            min = cnt[i];
            minRpos = i;
        }
    }
    for(int i = 1;i <= m;i++)
        printf("%d",code[minRpos][i]);
    printf("\n");
    return 0;
}
解决方案:40分
数组太大了,内存已经不够

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明离散最大似然解码运行不能,似乎是栈的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)