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

📄 data.cpp

📁 fp_growth研究关联规则的朋友们可以下载看看
💻 CPP
字号:
/*----------------------------------------------------------------------  File    : data.cpp  Contents: data set management  Author  : Bart Goethals  Update  : 04/04/2003  ----------------------------------------------------------------------*/#include <vector>using namespace std;#include "data.h"Transaction::Transaction(const Transaction &tr){  length = tr.length;  t = new int[tr.length];  for(int i=0; i< length; i++) t[i] = tr.t[i];}Data::Data(char *filename, int t){  fn = filename;  type = t;  current=0;  if(type>1) in = fopen(fn,"rt");  else in = fopen(fn,"rb");}Data::~Data(){  if(in) fclose(in);}Transaction *Data::getNext(){  Transaction *t=0;  switch(type){  case 1: t= getNextBin(); break;  case 2: t= getNextAs(); break;  case 3: t= getNextAsFlat(); break;  case 4: t= getNextAsQuest(); break;  }  if(t) current++;  else {    rewind(in);    current=0;  }  return t;}Transaction *Data::getNextAs() {  Transaction *t;  int tid, item, i, dummy;  vector<int> list;  static int cur=0,prev=-1;  static bool begin=true;    if(feof(in)) {    begin=true;    prev=-1;    return 0;  }  if(!begin) list.push_back(cur);  else begin=false;  while(true) {    fscanf(in, "%d %d %d",&dummy, &tid, &item);    if(feof(in)) {      int size=list.size();      t = new Transaction(size);      for(i=0; i<size; i++) t->t[i] = list[i];      list.clear();      return t;    }    else if(prev<0)	prev=tid;    else if(tid != prev){      prev = tid;      cur = item;      int size=list.size();      t = new Transaction(size);      for(i=0; i<size; i++) t->t[i] = list[i];      list.clear();			      return t;    }    list.push_back(item);  }}Transaction *Data::getNextAsFlat(){  vector<int> list;  char c;  // read list of items  do {    int item=0, pos=0;    c = getc(in);    while((c >= '0') && (c <= '9')) {      item *=10;      item += int(c)-int('0');      c = getc(in);      pos++;    }    if(pos) list.push_back(item);  }while(c != '\n' && !feof(in));    // if end of file is reached, rewind to beginning for next pass  if(feof(in)){    rewind(in);    return 0;  }  // Note, also last transaction must end with newline,   // else, it will be ignored    // sort list of items  // sort(list.begin(),list.end());  // put items in Transaction structure  Transaction *t = new Transaction(list.size());  for(int i=0; i<int(list.size()); i++)    t->t[i] = list[i];  return t;}Transaction *Data::getNextAsQuest(){  int tmptid, tid,l,i;  Transaction *t;	  fscanf(in,"%d %d %d",&tmptid,&tid,&l);  if(feof(in)) return 0;	  t = new Transaction(l);  for(i=0; i<l; i++) fscanf(in,"%d",&t->t[i]);  return t;}Transaction *Data::getNextBin(){  int tmptid, tid,l,i;  Transaction *t;	  fread(&tmptid,4, 1,in);  if(feof(in)) return 0;	  fread(&tid,4, 1,in);  fread(&l,4, 1,in);  t = new Transaction(l);  for(i=0; i<l; i++) fread(&t->t[i],4, 1,in);  return t;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -