📄 ssc_count.c
字号:
/*
Programa ssc_count.c
Realiza o treinamento do dicion醨io pelo algoritmo competitivo
Faz a contagem do n鷐ero de opera珲es utilizadas.
Autores: Francisco Madeiro Bernardino Junior e
Waslon Terllizzie Ara鷍o Lopes
Data: 11/07/2001
*/
/* definicao de macros ,prototipos */
#include <stdio.h>
#include "malloc.h"
#include <stdlib.h>
#include <math.h>
#define Kmax 16 /* valor maximo de dimensao */
#define cnome 50 /* comp. maximo de nome de arquivo,incluindo diretorio
*/
#define Nmax 512 /* numero maximo de niveis do dicionario */
unsigned long int n_add, n_sub, n_mul, n_div, n_comp;
double fdistq();
int main(){
/* definicao de variaveis */
FILE *dicionp, *dicioinip, *amosp, *resultp;
char dicion_aux[cnome],dicion[cnome], dicioini[cnome], amos[cnome],result[cnome];
int K, i, j,a,N, l, niter,nit, nvet, nclasse[Nmax],
nclasse_entrop[Nmax], m;
//nclasse eh o contador usado na distorcao modificada do algoritmo FS-SSC
//nclasse_entrop eh o contador usado para determinacao da entropia
//(numero de vetores em cada celula de voronoi -- contagem restrita a ultima iteracao0
unsigned long int cont,c;
float x[Kmax],y[Kmax];
float yy[Nmax][Kmax];
float etai,etaf,eta,dist,distant,entropia,p;
/* inicializacao de variaveis */
distant=1e99;
niter=1;
nvet=0;
/* interface com usuario */
scanf("%d",&K);
scanf("%d",&N);
scanf("%s",amos);
scanf("%s",dicioini);
scanf("%s",dicion_aux);
sprintf(dicion,"%s.dic",dicion_aux);
sprintf(result,"SSC_%s_%d.res",amos,N);
scanf("%d",&nit);
scanf("%f",&etai);
scanf("%f",&etaf);
n_add = n_sub = n_mul = n_div = n_comp = 0;
/*abre arquivos para ler sequencia de treino e dicionario inicial e
tambem para armazenar novo dicionario */
resultp=fopen(result, "a");
if (!resultp) {
printf("\nErro na abertura do arquivo de resultados\n");
exit(0);
} /* fim do if !resultp */
sprintf(amos,"%s.dat",amos);
amosp=fopen(amos, "r");
if (!amosp) {
printf("\nErro na abertura da sequencia de treino\n");
exit(0);
} /* fim do if !amosp */
dicioinip = fopen(dicioini, "r");
if (!dicioinip) {
printf("\nErro na abertura do dicionario inicial\n");
exit(0);
} /* fim do if !dicioinip */
dicionp = fopen(dicion, "w+");
if (!dicionp) {
printf("\nErro na abertura do dicionario\n");
exit(0);
} /* fim do if !dicionp */
/* inicializacao de outras variaveis */
cont=0;
while(fscanf(amosp,"%f",&x[0])!=EOF) {
cont++;
} /* fim do while - conta o numero total de amostras no arquivo*/
rewind(amosp);
//printf("\n%ld",cont);
cont/=K;
//printf("\n%ld",cont);
for(l=0; l<N; l++) {
nclasse[l]=0;
nclasse_entrop[l]=0;
for(i=0;i<K;i++)
fscanf(dicioinip,"%f",&y[i]);
for(j=0; j<K; j++) {
yy[l][j]=y[j];
} /* fim do for j */
} /* fim do for l */
rewind(dicioinip);
// Opera珲es para c醠culo da taxa de aprendiz.
n_sub++;
n_sub++;
n_div++;
/* leitura de vetor de amostras e dos gabaritos */
lex: for(c=0;c<cont;c++) {
if(nit==1) eta=etai;
else{
eta=etai+(etaf-etai)*(niter-1.0)/(nit-1.0);
}
//printf("\n%ld",c);
for(a=0;a<K;a++)
fscanf(amosp,"%f",&x[a]);
l=-1;
nvet++;
for(i=0;i<N;i++) {
l++;
for(a=0;a<K;a++)
y[a]=yy[i][a];
n_comp++;
if((dist=fdistq(x, y, K, distant)) < distant) {
distant=dist;
m=l;
} /* fim do if dist */
} /* fim do for i */
n_comp--; // Compara玢o feita a partir do 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -