tract.h
上传用户:lengbin
上传日期:2010-03-31
资源大小:121k
文件大小:9k
开发平台:

C/C++

  1. /*----------------------------------------------------------------------
  2.   File    : tract.h
  3.   Contents: item and transaction management
  4.   Author  : Christian Borgelt
  5.   History : 18.11.2001 file created from file apriori.c
  6.             28.12.2001 first version completed
  7.             02.01.2001 ta_sort mapped to v_intsort
  8.             19.02.2002 transaction tree functions added
  9.             17.07.2003 functions is_filter, ta_filter, tas_filter added
  10.             21.08.2003 parameter 'heap' added to tas_sort, tat_create
  11.             12.09.2003 function tas_total added
  12.             20.09.2003 empty transactions in input made possible
  13.             20.11.2004 function tat_mark added
  14.             11.12.2004 access functions for extended frequency added
  15.             15.12.2004 function nim_trunc added
  16. ----------------------------------------------------------------------*/
  17. #ifndef __TRACT__
  18. #define __TRACT__
  19. #ifndef NIMAPFN
  20. #define NIMAPFN
  21. #endif
  22. #include "vecops.h"
  23. #include "symtab.h"
  24. #include "tfscan.h"
  25. /*----------------------------------------------------------------------
  26.   Preprocessor Definitions
  27. ----------------------------------------------------------------------*/
  28. /* --- item appearance flags --- */
  29. #define APP_NONE    0x00        /* item should be ignored */
  30. #define APP_BODY    0x01        /* item may appear in rule body */
  31. #define APP_HEAD    0x02        /* item may appear in rule head */
  32. #define APP_BOTH    (APP_HEAD|APP_BODY)
  33. /* --- error codes --- */
  34. #define E_NONE        0         /* no error */
  35. #define E_NOMEM     (-1)        /* not enough memory */
  36. #define E_FOPEN     (-2)        /* cannot open file */
  37. #define E_FREAD     (-3)        /* read error on file */
  38. #define E_FWRITE    (-4)        /* write error on file */
  39. #define E_ITEMEXP  (-16)        /* item expected */
  40. #define E_DUPITEM  (-17)        /* duplicate item */
  41. #define E_APPEXP   (-18)        /* appearance indicator expected */
  42. #define E_UNKAPP   (-19)        /* unknown appearance indicator */
  43. #define E_FLDCNT   (-20)        /* too many fields */
  44. /*----------------------------------------------------------------------
  45.   Type Definitions
  46. ----------------------------------------------------------------------*/
  47. typedef struct {                /* --- an item --- */
  48.   int     id;                   /* item identifier */
  49.   int     frq;                  /* frequency in transactions */
  50.   int     xfq;                  /* extended frequency (t.a. sizes) */
  51.   int     app;                  /* appearance indicator */
  52. } ITEM;                         /* (item) */
  53. typedef struct {                /* --- a transaction --- */
  54.   int     cnt;                  /* number of items */
  55.   int     items[1];             /* item identifier vector */
  56. } TRACT;                        /* (transaction) */
  57. typedef struct {                /* --- an itemset --- */
  58.   TFSCAN  *tfscan;              /* table file scanner */
  59.   char    chars[4];             /* special characters */
  60.   NIMAP   *nimap;               /* name/identifier map */
  61.   int     app;                  /* default appearance indicator */
  62.   int     vsz;                  /* size of transaction buffer */
  63.   int     cnt;                  /* number of items in transaction */
  64.   int     *items;               /* items in transaction */
  65. } ITEMSET;                      /* (item set) */
  66. typedef struct {                /* --- a transaction set --- */
  67.   ITEMSET *itemset;             /* underlying item set */
  68.   int     max;                  /* maximum number of items per t.a. */
  69.   int     vsz;                  /* size of transaction vector */
  70.   int     cnt;                  /* number of transactions */
  71.   int     total;                /* total number of items */
  72.   TRACT   **tracts;             /* transaction vector */
  73. } TASET;                        /* (transaction set) */
  74. typedef struct _tatree {        /* --- a transaction tree (node) --- */
  75.   int     cnt;                  /* number of transactions */
  76.   int     max;                  /* size of largest transaction */
  77.   int     size;                 /* node size (number of children) */
  78.   int     items[1];             /* next items in rep. transactions */
  79. } TATREE;                       /* (transaction tree) */
  80. /*----------------------------------------------------------------------
  81.   Item Set Functions
  82. ----------------------------------------------------------------------*/
  83. extern ITEMSET*    is_create  (void);
  84. extern void        is_delete  (ITEMSET *iset);
  85. extern TFSCAN*     is_tfscan  (ITEMSET *iset);
  86. extern void        is_chars   (ITEMSET *iset, const char *blanks,
  87.                                               const char *fldseps,
  88.                                               const char *recseps,
  89.                                               const char *cominds);
  90. extern int         is_cnt     (ITEMSET *iset);
  91. extern int         is_item    (ITEMSET *iset, const char *name);
  92. extern const char* is_name    (ITEMSET *iset, int item);
  93. extern int         is_getfrq  (ITEMSET *iset, int item);
  94. extern int         is_setfrq  (ITEMSET *iset, int item, int frq);
  95. extern int         is_addfrq  (ITEMSET *iset, int item, int frq);
  96. extern int         is_getxfq  (ITEMSET *iset, int item);
  97. extern int         is_setxfq  (ITEMSET *iset, int item, int frq);
  98. extern int         is_getapp  (ITEMSET *iset, int item);
  99. extern int         is_setapp  (ITEMSET *iset, int item, int app);
  100. extern int         is_readapp (ITEMSET *iset, FILE *file);
  101. extern int         is_read    (ITEMSET *iset, FILE *file);
  102. extern int         is_recode  (ITEMSET *iset, int minfrq, int dir,
  103.                                int *map);
  104. extern void        is_trunc   (ITEMSET *iset, int cnt);
  105. extern int         is_filter  (ITEMSET *iset, const char *marks);
  106. extern int         is_tsize   (ITEMSET *iset);
  107. extern int*        is_tract   (ITEMSET *iset);
  108. /*----------------------------------------------------------------------
  109.   Transaction Functions
  110. ----------------------------------------------------------------------*/
  111. extern void        ta_sort    (int *items, int n);
  112. extern int         ta_unique  (int *items, int n);
  113. extern int         ta_filter  (int *items, int n, const char *marks);
  114. /*----------------------------------------------------------------------
  115.   Transaction Set Functions
  116. ----------------------------------------------------------------------*/
  117. extern TASET*      tas_create  (ITEMSET *itemset);
  118. extern void        tas_delete  (TASET *taset, int delis);
  119. extern ITEMSET*    tas_itemset (TASET *taset);
  120. extern int         tas_cnt     (TASET *taset);
  121. extern int         tas_add     (TASET *taset, const int *items, int n);
  122. extern int*        tas_tract   (TASET *taset, int index);
  123. extern int         tas_tsize   (TASET *taset, int index);
  124. extern int         tas_total   (TASET *taset);
  125. extern void        tas_recode  (TASET *taset, int *map, int cnt);
  126. extern int         tas_filter  (TASET *taset, const char *marks);
  127. extern void        tas_shuffle (TASET *taset, double randfn(void));
  128. extern void        tas_sort    (TASET *taset, int heap);
  129. extern int         tas_occur   (TASET *taset, const int *items, int n);
  130. #ifndef NDEBUG
  131. extern void        tas_show    (TASET *taset);
  132. #endif
  133. /*----------------------------------------------------------------------
  134.   Transaction Tree Functions
  135. ----------------------------------------------------------------------*/
  136. extern TATREE*     tat_create  (TASET *taset, int heap);
  137. extern void        tat_delete  (TATREE *tat);
  138. extern int         tat_cnt     (TATREE *tat);
  139. extern int         tat_max     (TATREE *tat);
  140. extern int         tat_size    (TATREE *tat);
  141. extern int*        tat_items   (TATREE *tat);
  142. extern int         tat_item    (TATREE *tat, int index);
  143. extern TATREE*     tat_child   (TATREE *tat, int index);
  144. extern void        tat_mark    (TATREE *tat);
  145. #ifndef NDEBUG
  146. extern void        tat_show    (TATREE *tat);
  147. #endif
  148. /*----------------------------------------------------------------------
  149.   Preprocessor Definitions
  150. ----------------------------------------------------------------------*/
  151. #define is_tfscan(s)      ((s)->tfscan)
  152. #define is_cnt(s)         nim_cnt((s)->nimap)
  153. #define is_name(s,i)      nim_name(nim_byid((s)->nimap, i))
  154. #define is_getfrq(s,i)    (((ITEM*)nim_byid((s)->nimap, i))->frq)
  155. #define is_setfrq(s,i,f)  (((ITEM*)nim_byid((s)->nimap, i))->frq  = (f))
  156. #define is_addfrq(s,i,f)  (((ITEM*)nim_byid((s)->nimap, i))->frq += (f))
  157. #define is_getxfq(s,i)    (((ITEM*)nim_byid((s)->nimap, i))->xfq)
  158. #define is_setxfq(s,i,f)  (((ITEM*)nim_byid((s)->nimap, i))->xfq  = (f))
  159. #define is_getapp(s,i)    (((ITEM*)nim_byid((s)->nimap, i))->app)
  160. #define is_setapp(s,i,a)  (((ITEM*)nim_byid((s)->nimap, i))->app  = (a))
  161. #define is_trunc(s,n)     nim_trunc((s)->nimap, n)
  162. #define is_tsize(s)       ((s)->cnt)
  163. #define is_tract(s)       ((s)->items)
  164. /*--------------------------------------------------------------------*/
  165. #define ta_sort(v,n)      v_intsort(v,n)
  166. /*--------------------------------------------------------------------*/
  167. #define tas_itemset(s)    ((s)->itemset)
  168. #define tas_cnt(s)        ((s)->cnt)
  169. #define tas_max(s)        ((s)->max)
  170. #define tas_tract(s,i)    ((s)->tracts[i]->items)
  171. #define tas_tsize(s,i)    ((s)->tracts[i]->cnt)
  172. #define tas_total(s)      ((s)->total)
  173. #define tas_shuffle(s,f)  v_shuffle((s)->tracts, (s)->cnt, f)
  174. /*--------------------------------------------------------------------*/
  175. #define tat_cnt(t)        ((t)->cnt)
  176. #define tat_max(t)        ((t)->max)
  177. #define tat_size(t)       ((t)->size)
  178. #define tat_item(t,i)     ((t)->items[i])
  179. #define tat_items(t)      ((t)->items)
  180. #ifndef ARCH64
  181. #define tat_child(t,i)    (((TATREE**)((t)->items +(t)->size))[i])
  182. #endif
  183. #endif