Red de conocimiento informático - Conocimiento del nombre de dominio - Existe una necesidad urgente de implementar el código del algoritmo Apriori en lenguaje C

Existe una necesidad urgente de implementar el código del algoritmo Apriori en lenguaje C

t(is_tfscan(s))\

+ ((tfs_delim(is_tfscan(s)) == TFS_REC) ?0 :1))

#define BUFFER(s) tfs_buf( is_tfscan(s))

/*------------------------------------ ------------ ----------------------------------

Constantes

- -------------------------------------- ------------ ------------------*/

#ifndef QUIET /* Si no es un silencio version*/

/* -- - Mensaje de error--- */

static const char *errmsgs[] = {

/* E_NONE 0 * / "no hay error\n",

/* E_NOMEM -1 */ "no hay suficiente memoria\n",

/* E_FOPEN -2 */ "no se puede abrir el archivo %s \n",

/* E_FREAD -3 */ "error de lectura en el archivo %s\n",

/* E_FWRITE -4 */ "error de escritura en el archivo %s \n",

/* E_OPTION -5 */ "opción desconocida -%c\n",

/* E_OPTARG -6 */ "argumento de opción faltante\n",

/* E_ARGCNT -7 */ "número incorrecto de argumentos\n",

/* E_SUPP -8 */ "soporte mínimo no válido %d\n",

/* E_NOTAS -9 */ "no hay elementos ni transacciones en las que trabajar\n",

for (tacnt = 0; 1; tacnt++) { /* bucle de lectura de transacciones*/

k = is_read(itemset, in) /* Leer la siguiente transacción*/

if (k < 0) error( k, fn_in, RECCNT(itemset), BUFFER(itemset)

if (k > 0) break /* Comprobar errores y final del archivo*/

k = is_tsize(itemset); /p>

if (k > max) max = k; /* Tamaño de la transacción*/

if (taset && (tas_add(taset, NULL, 0) ! = 0))

error(E_NOMEM); /* Agregar transacción cargada*/

}/* Agregar al conjunto de transacciones*/

fclose( in) ; in = NULL; /* Cerrar el archivo de entrada*/

fclose(in); in = NULL /* Cerrar el archivo de entrada*/

n /

n = is_cnt(itemset);/* Obtener el número de elementos*/

if( detallado ) MSG(fprintf(stderr, "[%d elemento(s),", n));

if( detallado ) MSG( fprintf(stderr, " %d transacción(es)] hecho ", tacnt));

if( detallado ) MSG(fprintf(stderr, "[%.2fs].\n", SEC_SINCE(t));

/* --- Ordenar y recodificar elementos--- */

if( verbose ) MSG(fprintf(stderr, "Ordenar y recodificar elementos..."));

t = clock(); /* Iniciar temporizador*/

map = (int*)malloc(is_cnt(itemset) *sizeof(int));

if (!map ) error( E_NOMEM); /* Crear mapa de identificador de elementos */

n = is_recode(itemset, supp, 2, map); /* 2: Modo de clasificación */

tas_recode(taset, map, n); /* Recodificar la transacción cargada*/

max = tas_max(taset);

a.size */

// Usar el correspondiente en otras partes de la implementación

// Identificar a la identificación interna

stat->reserve( n+ 2 ) ;

stat->push_back( 0 )

para(int j= 0; j< n ;j++ )

para(int j= 0 ; j< n ;j++ )

for(int j=0; j< j++ )

{

stat->push_back( 0 )

relist->insert( Element( atoi( is_name( itemset, j ) ),j) );

}

if( detallado ) MSG(fprintf(stderr , "[%d elemento(s)] ", n));

if( detallado ) MSG(fprintf(stderr, "done [%.2fs].\n", SEC_SINCE(t)) ;

/* --- Creando árbol de transacciones --- */

if( detallado ) MSG(fprintf(stderr, "creando árbol de transacciones ..."));< / p>

t = reloj(); /* Iniciar temporizador*/

tatree = tat_create(taset,1 /* Crear árbol de transacciones*/

if ( ! tatree) error(E_NOMEM) /* (compactar transacciones) */

tt = clock() /* Presta atención al tiempo de compilación*/

if( detallado ) MSG (fprintf(stderr, "done [%.2fs].\n", SEC_SINCE(t));

/* --- Crear un árbol de proyecto --- */

if( detallado ) MSG(fprintf(stderr, "Verificar subconjunto de tamaño 1"));

t = reloj(); tc = 0 /* Iniciar temporizador y */< / p>

istree = ist_create(n, supp); /* Crear un árbol de conjunto de elementos*/

if (! istree) error(E_NOMEM);

for (k = n; --k >= 0; ) /* Establecer frecuencia única*/

ist_setcnt(istree, k, is_getfrq( itemset, k));

ist_settac(istree, tacnt); /* Establecer el número de transacciones*/

use = (char*)malloc(n *sizeof(char) );

if (!usage) error(E_NOMEM); /* Crear un vector de uso del proyecto */

/* --- Verificar un subconjunto de proyectos - -- * /

while (ist_height(istree) < max && ( ( ismax == -1 && endApriori == false )

|| ist_height(istree) < ismax )

)<

/p>

{

nbgen = 0; cuando no se alcanza la altura, */

if (k < 0) error(E_NOMEM); árbol de proyecto Nivel 1*/

if (k != 0) break /* Si no se agrega ningún nivel, break */

if( detallado ) MSG(fprintf(stderr, " % d", ist_height(istree));

if ((i < n) /* Verifique el nivel actual de uso del proyecto*/

&& (i *(double) tt < 0.1 *n *tc)) {

n = i; x = clock() /* Si el elemento se elimina, y */

tas_filter( taset, uso ); / * El tiempo de cálculo es suficiente, */

tat_delete(tatree); /* Eliminar elementos innecesarios*/

tatree = tat_create(taset, 1);

if (!tatree) error(E_NOMEM);

tt = clock() -x /* Reconstruir el árbol de transacciones y */

}/* Nota el nuevo tiempo de construcción */

x = clock(); /* Iniciar temporizador*/

ist_countx(istree, tatree, nbfreq, istree->supp); árbol*/

tc = reloj() -x

actNfC = 1-double(nbfreq)/double(nbgen)

avgNfC = avgNfC + actNfC ;

if( detallado )

{

cout<<" \t Fk: "<

}

bdnsize += nbgen - nbfreq;

if( nivel >=4 && ( bdnsize / nbgen < 1.5 ) && ( bdnsize > 100 )

{

if( actNfC < ratioNfC )

{

eps = 0;

endApriori = true;

}

else if( actNfC > 0.25 )

endApriori = true ;

}

}/* y presta atención al nuevo tiempo de conteo*/

if( detallado ) MSG(fprintf (stderr, " done [%.2fs].\n", SEC_SINCE(t)));

/* --- Conjunto de elementos de filtro --- */

t = clock(); /* Iniciar el temporizador*/

#ifdef MAXIMAL /* Filtrar el conjunto máximo de elementos*/

<

/p>

if( detallado ) MSG(fprintf(stderr, "Filtrar el conjunto de elementos más grande...");

if(detallado) MSG(fprintf(stderr, "Filtrar el elemento más grande set..."); Conjunto de elementos...."));

if( ratioNfC == 0 || nbgen < k+1 || ist_height(istree)>= max )

ist_filter2(istree, IST_MAXFRQ, 0);

else

ist_ filter2(istree, IST_MAXFRQ, bdn);

if( detallado ) MSG (fprintf(stderr, " done [%.2fs].\n", SEC_SINCE(t)));

vacío = (n <= 0) ?1 : 0; */

#endif /* ¿Es el más grande?*/

#ifdef CERRADO /* Filtrar conjunto de elementos cerrados*/

if( detallado ) MSG( fprintf (stderr, "Filtrar conjunto de elementos cerrados ."));

ist_filter(istree, IST_CLOSED);

if( detallado ) MSG(fprintf(stderr, " hecho [%.2fs] .\n", SEC_SINCE( t));

for (k = n; --k >= 0; ) /* Comprobar si hay elementos en todos los t.a*/

if (is_getfrq(itemset, k ) == tacnt) break;

vacío = ( k <= 0) ?1 : 0 /* Compruebe si el conjunto de elementos está vacío*/

#endif /* Cerrado */

/* --- Imprimir conjunto de elementos--- */

for (i = ist_height(istree); --i > = 0; )

map[i] = 0; /* Borrar contador de conjunto de elementos*/

if( detallado ) MSG(fprintf(stderr, "escribiendo %s... ", (fn_out) ?" "));

t = reloj(); /* Iniciar temporizador */

if (fn_out) { /* Si el archivo de salida se proporciona, */

out = fopen(fn_out, " w"); /* Abre el archivo de salida*/

if (! out) error(E_FOPEN, fn_out);

if (empty) fprintf(out, " (%d)\n", tacnt);

}/* Reportar un elemento vacío set */

ist_init(istree); /* init. Extraer conjunto de elementos*/

set = is_tract(itemset); /* Obtener búfer de transacción*/

< p); > for (n = vacío; 1; n++) { /* Extraer el conjunto de elementos del árbol*/

k = ist_set(istree, set, &supp);

if ( k <= 0) break; /* Obtener el siguiente conjunto de elementos frecuentes*/

map[k-1]++

;/* Calcular el conjunto de elementos*/

if (fn_out) { /* Si se proporciona el archivo de salida*/

for (i = 0; i < k; i++) { /* Recorrer elementos*/

fputs(is_name(itemset, set[i]), out);

fputc(' ', out); Nombre*/

}/* seguido de delimitador*

f

fprintf(out, "(%d)\n", supp);

}/* Soporte para imprimir conjuntos de elementos*/

else

{

short unsigned * is = new short unsigned [k];

for (i = 0; i < k; i++) /* Recorrer elementos*/

{

is[i] = set[i];

}

if( k < nivel || nbgen < k+1 || ist_ altura(istree)>= max )

{

bdPapriori-> insertar(es, k ,supp

(*stat)[ 0 ] ++;

(*stat)[ k+1 ]+ +;

if( maxBdP & lt; k )

maxBdP = k

}

else

{

generadoFk = verdadero

}

eliminar[] es

}

}<; /p>

if (fn_out ) { /* si se proporciona un archivo de salida */

if (fflush(out) != 0) error(E_FWRITE, fn_out);

if (out ! = stdout) fclose(out);

out = NULL /* Cerrar el archivo de salida*/

}

if( detallado ) MSG(fprintf(stderr, "[%d conjunto(s)] hecho ", n));

if( detallado ) MSG(fprintf(stderr, "[%.2fs].\n " , SEC_SINCE(t));

/* --- Imprimir estadísticas del conjunto de elementos --- */

k = ist_height(istree); /* Encuentra el último no- contador cero*/

if ((k > 0) &&(map[k-1] <= 0)) k--;

if( detallado ){

printf("%d\n", vacío); /* Imprime el número de conjuntos de elementos*/

for (i = 0; i < k; i ++) printf( "% d\n", map[i]);

}

/* --- Limpieza --- */

#ifndef NDEBUG / * si esta es una versión de depuración*/

free(usage); /* Eliminar el vector de uso del elemento*/

free(map) y el mapa de identificador */ <

p> ist_delete(istree); /* Eliminar árbol de conjunto de elementos, */

if (taset) tas _delete(taset, 0); /* Conjunto de transacciones, */

is_delete ( conjunto de elementos); /* y conjunto de elementos*/

#endif

return tatree

}