亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fp.txt

?? 數據挖掘中 fp增長算法求事務的頻繁項集
?? TXT
字號:
********fp增長算法求出頻繁項集*******/
/********作者:xiaocui************/
/********時間:2006.10.12*********/
/********版本:v1.0**********/

/****fp增長算法:****************
(1)計算各個項的支持度,按降序排列
(2)把各個事務的項按(1)的順序排列
(3)改變各個共根項的計數
(4)以各個單項為尾計算各個頻繁項集
 **************************************/

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using  namespace  std;

vector<vector<char> > VVCHAR;//存放一個集合的所有子集
vector<int> IS_NOT; //記錄各個元素的選與未選
const SUPPORT=3; //支持度
/********返回一個序列中最大元素的索引號******/
int  max_index(const vector<int> & ivec)
{
 int max_num=-100;
 int index;
 for(int i=0;i<ivec.size();++i)
 {
  if(ivec[i]>max_num)
  {
   max_num=ivec[i];
   index=i;
  }
 }
 return  index;
}

//從各個事務的項集中得到數據庫的所有單個項并按支持度排成降序
vector<char>  reverse_unique_item(const vector<vector<char> > & vvchar )
{
 vector<char> cvec;
 vector<int> count;
 vector<char> reverse_cvec;
 for(int i=0;i<vvchar.size();++i)
 {
  for(int j=0;j<vvchar[i].size();++j)
  {
   vector<char>::iterator iter;
   //找不到說明前面沒有重復的單項
   if((iter=find(cvec.begin(),cvec.end(),vvchar[i][j]))==cvec.end())
   {
    cvec.push_back(vvchar[i][j]);
    count.push_back(1);
   }
   else
   {
    count[iter-cvec.begin()]+=1;//在重復元素對應的計數位置加1
   }    
  }
 }
 /******每次從序列中選出支持度最大的項加入倒序序列(不斷刪除最大元素)*****/
    while(count.size()>0)
 {
  int index=max_index(count);
  reverse_cvec.push_back(cvec[index]);
  cvec.erase(cvec.begin()+index);
  count.erase(count.begin()+index);
 }
 return  reverse_cvec;
}

/*******排列各個事務中的項集,參見單項的降序序列*****/
void sort_transaction(const vector<char> &reverse_cvec,
       vector<vector<char> > &vvchar)
{
 for(int i=0;i<vvchar.size();++i)
 {
  vector<int> count;
  for(int j=0;j<vvchar[i].size();++j)
  {   
   vector<char>::const_iterator iter;
   iter=find(reverse_cvec.begin(),reverse_cvec.end(),vvchar[i][j]);
   count.push_back(iter-reverse_cvec.begin());//得到該事務各個項在倒序序列的序號
  }
  vector<char> tmp=vvchar[i];//該事務的副本
  vector<char> reverse_tmp;//該事務的倒序序列
  while(count.size()>0)
  {
   int index=max_index(count);
   reverse_tmp.push_back(tmp[index]);
   tmp.erase(tmp.begin()+index);
   count.erase(count.begin()+index);
  }
  reverse(reverse_tmp.begin(),reverse_tmp.end());
  vvchar[i]=reverse_tmp;//得到倒序序列中的順序
 }
}

/********兩個分支進行比較,檢查2個分支開頭有多少項相同******/
int  root_location(const vector<char> & vchar1, const vector<char> & vchar2)
{
 int i;
 for(i=0;i<vchar1.size();++i)
 {
  if(vchar1[i]!=vchar2[i])
  {
   break;
  }
 }
 return i;
}

/*********改變各個共根項的計數,形成邏輯上的fp樹********/
void count_root(const vector<vector<char> > & vvchar, 
    vector<vector<int> > & vvint)
{
 //初始化,分支上各個單項的計數都為1
 for(int i=0;i<vvchar.size();++i)
 {
  vector<int> ivec;
  for(int j=0;j<vvchar[i].size();++j)
  {
   ivec.push_back(1);
  }
  vvint.push_back(ivec);
 }
 for(int k=0;k<vvchar.size();++k)
 {
  for(int j=k+1;j<vvchar.size();++j)
  {
   int index=root_location(vvchar[k],vvchar[j]);
   if(index!=0)
   {
    for(int i=0;i<index;++i)
    {
     vvint[k][i]+=1;
     vvint[j][i]+=1;
    }
   }
  }
 }
}

/*******對規回溯產生所有一個集合的所有子集************/
void  backtrack(int m, vector<char> cvec)
{
 //本次深度搜索完畢
 if(m>=cvec.size())
 {
  vector<char> vchar;
  for(int i=0;i<cvec.size();++i)
  {
   if(IS_NOT[i]==1)
   {
    vchar.push_back(cvec[i]);
   }
  }
  if(vchar.size()!=0)
  {
   VVCHAR.push_back(vchar);//保留該子集
  }
  return;
 }
 for(int i=0;i<=1;++i)
 {
  //首先記錄本次的選擇
  if(IS_NOT.size()<cvec.size())
  {
   IS_NOT.push_back(i);
  }
  else
  {
   IS_NOT[m]=i;
  }
  backtrack(m+1,cvec);//深度遞歸
 }
}

/********根據邏輯fp樹,以各個單項為尾找出頻繁項集*********/
vector<vector<char> > frequen_collection(const vector<vector<char> > & vvchar,
                                         const vector<vector<int> > & vvint,
           const vector<char> & item,
           int  support)
{
 vector<vector<char> > collection;  
 for(int i=item.size()-1;i>=0;--i)
 {
  //對每個單項,尋找到以它為尾的所有樹枝
  vector<vector<char> > vvchar_tmp;
  for(int j=0;j<vvchar.size();++j)
  {
      if(find(vvchar[j].begin(),vvchar[j].end(),item[i])!=vvchar[j].end())
   {
    vector<char> vchar_tmp;
    for(int k=0;k<find(vvchar[j].begin(),vvchar[j].end(),item[i])-vvchar[j].begin();++k)
    {
     vchar_tmp.push_back(vvchar[j][k]);
    }
    if(vchar_tmp.size()>0)
    {
     vvchar_tmp.push_back(vchar_tmp);
    }
   }
  }
  /********如果該單項前面沒有樹枝,說明是樹頂,單獨考慮*****/
  if(vvchar_tmp.size()==0)
  {
   int item_count=0;
   for(int m=0;m<vvchar.size();++m)
   {
    for(int n=0;n<vvchar[m].size();++n)
    {
     if(vvchar[m][n]==item[i])
     {
      item_count=item_count+1;
     }
    }
   }
   if(item_count>=support)
   {
    vector<char> tmp;
    tmp.push_back(item[i]);
    collection.push_back(tmp);
   }
  }
  /**************找出以該單項為尾的頻繁項集****************/
  if(vvchar_tmp.size()>=support) //如果以該單項為尾的樹枝數大于等于支持度
  {
   /*******計算以該單項為尾的某個樹枝中各項的出現次數******/
   vector<char> vchar_tmp2;
   vector<int> count;
   for(int i1=0;i1<vvchar_tmp.size();++i1)
   {
    for(int j=0;j<vvchar_tmp[i1].size();++j)
    {
     vector<char>::iterator iter;
     if((iter=find(vchar_tmp2.begin(),vchar_tmp2.end(),vvchar_tmp[i1][j]))==vchar_tmp2.end())
     {
      vchar_tmp2.push_back(vvchar_tmp[i1][j]);//第1次添加進去
      count.push_back(1);//第1次添加進去,計數初始化為1
     }
     else
     {
      count[iter-vchar_tmp2.begin()]+=1;
     }
    }
   }
   //首先刪除單項重復次數小于support的項
   for(int k=0;k<count.size();++k)
   {
    if(count[k]<support)
    {
     count.erase(count.begin()+k);
     vchar_tmp2.erase(vchar_tmp2.begin()+k);
     k--;
    }
   }
   //從剩下的單項重復次數均大于支持度的樹枝中生成頻繁項集
   //等價于生成集合的子集
   backtrack(0,vchar_tmp2);//遞歸生成全部子集,保存在VVCHAR
   for(int index=0;index<VVCHAR.size();++index)
   {
    VVCHAR[index].push_back(item[i]);
    collection.push_back(VVCHAR[index]);
   }
      int item_count=0;
   for(int m=0;m<vvchar.size();++m)
   {
    for(int n=0;n<vvchar[m].size();++n)
    {
     if(vvchar[m][n]==item[i])
     {
      item_count=item_count+1;
     }
    }
   }
   if(item_count>=support)
   {
    vector<char> tmp;
    tmp.push_back(item[i]);
    collection.push_back(tmp);
   }
   VVCHAR.erase(VVCHAR.begin(),VVCHAR.end());
   IS_NOT.erase(IS_NOT.begin(),IS_NOT.end());
  }
 }
 return  collection;
}

/**********輸出顯示*********/
void  print(vector<vector<char> > vvchar)
{
 for(int i=0;i<vvchar.size();++i)
 {
  for(int j=0;j<vvchar[i].size();++j)
  {
   cout<<vvchar[i][j];
  }
  cout<<endl;
 }
}

void main()
{
 //從事務文件中把各個事務寫到vvchar中
 ifstream  input=ifstream("transaction.txt");
 vector<vector<char> > transaction;//事務集合
 vector<vector<int> > count;//樹枝上各點的計數
 vector<vector<char> > collection;//頻繁項集
 if (input==0) //文件打開失敗
 {
  cout<<"存放事務的文件transction不存在,請先手工建立"<<endl;
 }
 else
 {
  while(input)
  {
   string  str;
   getline(input,str,'\n'); //得到一行事務項集
   if(str!="")//最后有一空行,所以在此用if消除
   {
    vector<char> cvec;
    for(int i=0;i<str.size();++i)
    {    
     cvec.push_back(str[i]);
    }
    transaction.push_back(cvec);
   }
  }
 }
    vector<char> reverse_cvec=reverse_unique_item(transaction);//得到按支持度降序的項集合
 sort_transaction(reverse_cvec,transaction);//把各個事務的項按降序項集和重排
 count_root(transaction,count);//改變同根計數,形成邏輯fp樹
 collection=frequen_collection(transaction,count,reverse_cvec,SUPPORT);
 //輸出頻繁項集
 cout<<"經過fp增長算法得到的頻繁項集為:"<<endl;
 print(collection);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利一区二区在线观看| 在线影视一区二区三区| 亚洲女同女同女同女同女同69| 欧美老肥妇做.爰bbww| 国产成人高清在线| 日本在线不卡一区| 一区二区三区在线视频观看58 | 91在线无精精品入口| 日韩电影免费在线| 国产精品久久久久毛片软件| 欧美xingq一区二区| 在线观看国产91| 丁香激情综合国产| 狠狠色综合日日| 性做久久久久久免费观看欧美| 国产精品久久久久久户外露出| 精品国产乱码久久久久久蜜臀| 欧美三级电影在线看| 99视频超级精品| 国产999精品久久久久久绿帽| 午夜国产精品一区| 一个色综合网站| 亚洲欧美综合网| 中日韩免费视频中文字幕| 欧美成人video| 91精品国产综合久久小美女| 欧美视频日韩视频| 一本在线高清不卡dvd| 成人高清在线视频| 高清成人在线观看| 国产精品18久久久久久久久久久久 | 韩国成人在线视频| 日本中文字幕一区二区有限公司| 亚洲一区二区综合| 亚洲精品国产无天堂网2021| 日韩理论电影院| 一区二区中文字幕在线| 国产精品人成在线观看免费| 欧美国产一区二区在线观看| 久久精品日产第一区二区三区高清版 | 在线一区二区三区四区| 日本久久电影网| 在线精品视频免费播放| 欧美视频在线观看一区| 欧美日韩一区二区三区免费看| 欧美主播一区二区三区| 欧美日韩另类一区| 欧美顶级少妇做爰| 日韩久久免费av| 日韩欧美在线网站| 精品国产污污免费网站入口| 久久九九99视频| 欧美激情一区二区在线| 国产精品久久久久永久免费观看 | 欧美日韩国产另类不卡| 日韩午夜激情免费电影| 337p日本欧洲亚洲大胆色噜噜| 精品国产3级a| 国产精品初高中害羞小美女文| 亚洲视频图片小说| 午夜电影一区二区| 狠狠色丁香久久婷婷综| 不卡区在线中文字幕| 在线观看亚洲精品| 91精品免费在线观看| 久久精品欧美日韩精品| 亚洲欧洲精品天堂一级| 亚洲国产日韩a在线播放性色| 日本欧美在线看| 国产成人精品免费| 欧美三级日韩三级| 久久夜色精品一区| 亚洲精品中文字幕乱码三区| 免费人成精品欧美精品| 国产jizzjizz一区二区| 欧美三级电影网| 久久久91精品国产一区二区三区| 综合久久给合久久狠狠狠97色| 日日夜夜精品免费视频| 国内成人免费视频| 色婷婷国产精品综合在线观看| 正在播放亚洲一区| 国产精品嫩草99a| 日韩激情视频网站| 99久久精品国产网站| 91精选在线观看| 中文字幕综合网| 久久激情五月婷婷| 在线中文字幕一区| 日本一区免费视频| 亚洲电影一级黄| 成人毛片视频在线观看| 91精品国产色综合久久不卡蜜臀 | 国产剧情av麻豆香蕉精品| 91黄视频在线观看| 久久美女艺术照精彩视频福利播放 | 午夜精品一区二区三区免费视频| 国产精品一区二区在线看| 欧美男同性恋视频网站| 国产精品免费视频网站| 久久激情五月婷婷| 欧美日韩一区视频| 成人免费在线观看入口| 国产综合久久久久久鬼色| 欧美视频一区二区| 亚洲天堂免费在线观看视频| 国产综合色在线| 欧美一区二区日韩一区二区| 一区二区免费在线| 不卡av免费在线观看| 欧美精品一区二区三区四区 | 精品免费一区二区三区| 亚洲一区二区三区中文字幕| 大尺度一区二区| 精品国偷自产国产一区| 日韩中文字幕区一区有砖一区| 91亚洲精品一区二区乱码| 国产亚洲成aⅴ人片在线观看| 美女一区二区视频| 欧美猛男gaygay网站| 亚洲美女视频在线| 97se狠狠狠综合亚洲狠狠| 亚洲国产精品国自产拍av| 国产米奇在线777精品观看| 日韩欧美国产成人一区二区| 丝袜亚洲另类欧美综合| 欧美三区在线视频| 亚洲一区二区三区四区在线观看| 色狠狠色噜噜噜综合网| 亚洲欧美另类在线| 99免费精品在线观看| 亚洲国产精品二十页| 成人午夜免费电影| 国产亚洲精品资源在线26u| 国产一区激情在线| 国产午夜精品一区二区三区嫩草| 国产精品一级二级三级| 国产欧美一区二区三区在线老狼| 国产精品综合久久| 欧美国产日韩在线观看| av电影一区二区| 亚洲免费伊人电影| 在线观看欧美日本| 亚洲一二三专区| 91精品久久久久久久91蜜桃| 久久国产精品区| 久久久久亚洲蜜桃| www.av精品| 一二三区精品视频| 7777女厕盗摄久久久| 狂野欧美性猛交blacked| 26uuu国产日韩综合| 国产精品影视天天线| 亚洲欧洲av色图| 精品视频1区2区| 激情久久久久久久久久久久久久久久 | 欧美日韩国产123区| 日韩国产高清在线| 久久一区二区三区四区| 成人国产视频在线观看| 一区二区三区欧美日| 欧美精品成人一区二区三区四区| 免费不卡在线观看| 久久精品网站免费观看| 日本高清不卡视频| 日av在线不卡| 国产精品每日更新在线播放网址| 色中色一区二区| 日本不卡不码高清免费观看| 久久久亚洲高清| 色婷婷精品久久二区二区蜜臀av| 日韩国产精品久久| 欧美国产一区二区在线观看| 欧美天堂一区二区三区| 九九久久精品视频| 亚洲免费观看视频| 日韩欧美国产午夜精品| 99久久精品免费观看| 日本人妖一区二区| 国产精品伦理在线| 欧美午夜视频网站| 国产大片一区二区| 亚洲一二三四在线| 国产欧美一区二区在线观看| 欧美日韩国产精选| 成人黄页在线观看| 日韩高清欧美激情| 国产精品久久久久三级| 日韩欧美国产综合一区 | 青青草原综合久久大伊人精品| 中文一区二区在线观看 | 中文字幕日韩欧美一区二区三区| 欧美一区二区人人喊爽| 91热门视频在线观看| 黑人巨大精品欧美黑白配亚洲| 一级女性全黄久久生活片免费| 久久久影视传媒| 欧美一级欧美三级| 一本到不卡免费一区二区| 国产v综合v亚洲欧|