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

📄 data.cpp

📁 FP-GROWTH算法实现数据挖掘中的关联规则
💻 CPP
字号:
/*----------------------------------------------------------------------
  File    : data.cpp
  Contents: data set management
   Update  : 12/3/2005
  ----------------------------------------------------------------------*/
#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 = tr.t;
}
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 = list;
      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 = list;
      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 != '
' && !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 = list;
  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);
  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,4, 1,in);
  return t;
}

⌨️ 快捷键说明

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