⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssc_count.c

📁 SSC Algorithm - competitive for data quantization
💻 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 + -