LT_柱状图

clc;clear;
K = 10000;%%%%%%%%%%%%%
m = K;
c = 0.01;
o = 0.5;
x = ones(1,m);
S = c*sqrt(K)*log(K/o);
  for cou_num = 1:100               %½yÓ‹    %%%%%%%%%
    x_1 = rand(1,m)<0.5 ;           %ÐÅÔ´´a×Ö  %%%%%%%%%
    generate = rand(1,12000);       %Éú³ÉëS™C”µ%%%%%%%%%
    n = 10000;                      %%%%%%%%%%%%%%%%%%
      while(n<=12000)                %%%%%%%%%%%%%%%%%
        Pgenerate = generate(1,1:n);
        Z = 0;
        for d = 1:K
            index_d = 2:K;
            if find(d==index_d)
                PP = 1/d/(d-1);
            elseif d==1
                PP = 1/K;
            end
            P_P(d) = PP;
            d_index = 1:round(K/S)-1;
            if (find(d==d_index))
                tt = S/K/d;
            elseif d==round(K/S)
                tt = S/K*log(S/o);
            else
                tt = 0;
            end
            t(d) = tt;
            Z = Z + P_P(d)+t(d);
        end
        P_P;
        t;
        Z;
        for d = 1:K
            P(d) = (P_P(d)+t(d))/Z;
        end
        P;
        sum = 0;
        for i = 1:K
            sum = sum + P(i);
            sum_1(i) = sum;
        end
        sum_1;
        for j = 1:length(Pgenerate)
            for i = 1:length(sum_1)
                if Pgenerate(j)<sum_1(i)
                    label(j) = i;
                    break;
                end
            end
        end
        label;
        for j = 1:n
            a = zeros(1,m);
            vector = randperm(m,label(j));
            for i = 1:length(vector)
                a(vector(i)) = 1;
            end
            G(1:m,j) = a;
        end
        y = mod(x_1*G,2);        %生成碼字
        while(1)                 %譯碼
            %***********判斷準備開始1*****************
            for i = 1:n
                front_judge(i) = length(find(G(:,i)==1));
            end
            %***********判斷準備結束1*****************
            count = zeros(1,n);
            for j = 1:n
                index_1 = find(G(:,j)==1);
                if length(index_1)==1     %條件滿足
                    count(j) = index_1;
                    x(index_1) = y(j);
                    G(index_1,j) = 0;
                end
            end
            t = 1;
            countt = zeros(1,length(find(count~=0)));
            for j = 1:n
                if count(j)~=0
                    countt(t) = count(j);
                    t = t + 1;
                end
            end
            for i = 1:length(countt)         %橫坐標count
                for j = 1:n
                    if G(countt(i),j) == 1
                        y(j) = xor(x(countt(i)),y(j));
                        G(countt(i),j) = 0;
                    end
                end
            end
            %***********判斷準備開始2*****************
            for i = 1:n
                last_judge(i) = length(find(G(:,i)==1));
            end
            %***********判斷準備結束2*****************
            if last_judge==front_judge
                break;
            end
        end
        x_2 = x;       %%%%%%%%%%%%%%%%%%%%
        x_1   ;        %%%%%%%%%%%%%%%%%%%%
        sum = 0;
        for i = 1:m
            if x_1(i)~=x_2(i)
                sum = sum + 1;
            end
        end 
        sum;
        if sum~=0                %×g´aʧ”¡
            n = n + 50;%%%%%%%%%%%%%%%%%%%%%%%%%%%
        else                     %×g´a³É¹¦
            record_result = n;   %ӛ䛽Y¹û
            break;
        end
     end
    record_result;
    record_finished(cou_num) = record_result;
 end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值