求教一个算法实现:海明距离最小值,请高手指教!焦急等待中...(200)

  • 主题发起人 xiaoli1740
  • 开始时间
X

xiaoli1740

Unregistered / Unconfirmed
GUEST, unregistred user!
算法要求: 100个数据中只有10个是正确的,需要返回一些长度为10的数组,这些返回的数组中至少有一组含有9个正确数据,达到海明距离最小值,求返回的数组数量最小为多少?
 
G

guanyue7613

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
program HAMMING(input,output);{$R-} {$S-} { direttive per il compilatore }uses     crt,graph;
{ pacchetti grafici standard TurboPascal 4.0 }const     N = 100;
{ n. nodi di ingresso }     M = 9;
  { n.nodi intermedi=n.nodi di uscita=n.di classi }              { non oltre 10 per ragioni grafiche }     EPSILON = 0.09;
{ costante, deve essere < di 1/M }type     indice_ingressi = 1..N;
    indice_uscite = 1..M;
    valori_ingressi = -1..1;
    reticolo = array[indice_ingressi] of valori_ingressi;var     W : array[indice_ingressi,indice_uscite] of real;
        { pesi delle connessioni tra i nodi di ingresso e quelli intermedi }     THETA : array[indice_uscite] of real;
{ soglie dei nodi intermedi }     T : array[indice_uscite,indice_uscite] of real;
        { pesi delle connessioni tra i nodi della sottorete upper }     MU,MU_TEMP : array[indice_uscite] of real;
        { uscite dei nodi della sottorete upper }     X : reticolo;
{ ingressi della rete }     GR_CORRUZ : real;
{ grado di corruzione del pattern incognito }     modello : indice_uscite;
    ingresso : indice_ingressi;
    somma : real;
    stringa : string;
    iterazione : integer;
    i,j,col : integer;{$I HAMMING.UTI} { includo la sezione grafica }function f_thres( ALFA : real ): real;{ function threshold logic without saturation }begin
    if ALFA<0 then
 f_thres:=0              else
 f_thres:=ALFA;
end;
{ of f_thres }function min(x,y : integer):integer;
begin
    if x<y then
 min:=x           else
 min:=y;
end;
{ of min }procedure step0;
{ inizializzazione }begin
    inizschermo;
{ inizializzo il modo grafico }    stile(1);stampa(1,240,'Hamming Net');
{ stampo il titolo }    { visualizzo i modelli disponibili }    stile(0);stampa(40,10,'Modelli disponibili:');
   col:=10;
   for modello:=1 to min(6,M)do
 begin
        pattern(modello,X);
       griglia(X,50,col);stampa_int(125,col+40,modello);
       col:=col+90;
       end;
   col:=10;
   for modello:=7 to min(10,M)do
 begin
        pattern(modello,X);
       griglia(X,150,col);stampa_int(225,col+40,modello);
       col:=col+90;
       end;
end;
{ of step0 }procedure step1;
{ assegno i pesi delle connessioni e degli offsets }begin
    { in the lower subnet }    for modello:=1 to Mdo
 begin
        pattern(modello,X);
{ leggo il pattern modello }        for ingresso:=1 to Ndo
 W[ingresso,modello]:=X[ingresso]/2;
       THETA[modello]:=-N/2;
       end;
   { in the upper subnet }    for i:=1 to Mdo
        for j:=1 to Mdo
            if i=j then
 T[i,j]:=1                   else
 T[i,j]:=-EPSILON;
end;
{ of step1 }procedure step2;
{ inizializzo con pattern d'ingresso ignoti }begin
    { scelgo il modello e il grado di corruzione }    leggimodello(modello,GR_CORRUZ);
   pattern(modello,X);
{ carico il modello }    { corrompo effettivamente il modello }    for ingresso:=1 to Ndo
 if random<GR_CORRUZ then
 X[ingresso]:=-X[ingresso];
   griglia(X,150,425);
{ visualizzo il pattern corrotto }    { lo applico all'ingresso }    for j:=1 to Mdo
 begin
        somma:=-THETA[j];
       for i:=1 to Ndo
 somma:=somma+W[i,j]*X[i];
       MU[j]:=f_thres(somma);
       end;
   iterazione:=1;
end;
{ of step2 }procedure step3;
{ itero }begin
    for i:=1 to Mdo
 begin
        somma:=-MU[i];
       for j:=1 to Mdo
 somma:=somma+MU[j];
       MU_TEMP[i]:=f_thres(MU[i]-EPSILON*somma);
       end;
   MU:=MU_TEMP;
   visualizzauscita;
   iterazione:=iterazione+1;
end;
{ of step3 }begin
 { of program }        step0;
{ inizializzazione }        step1;
{ assegno i pesi delle connessioni e degli offsets }        repeat            step2;
{ inizializzo con un pattern d'ingresso ignoto }            repeat                step3;
{ iterazioni }                stringa:=upcase(readkey);
           until (stringa='N') or (stringa='E');
       until (stringa='E');
       RestoreCRTmode;
end.
 { of program }
 
X

xiaoli1740

Unregistered / Unconfirmed
GUEST, unregistred user!
感谢楼上回复,只是算法有点看不大明白,能再简单介绍下算法实现的思路么?十分感激!
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
863
DelphiTeacher的专栏
D
顶部