📄 genrule.cpp
字号:
#include "genrule.h"
using namespace std;
void cout_vec(vector<int> v)
{
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
cout<<endl;
}
int read_a_line(ifstream& file,vector<int>& data )
{
if( file.eof() ) return 0;
char c;
int pos;
int ret=0;
data.clear();
do
{
int item = 0;
pos = 0;
file.get(c);
if(c=='<')
{
file.get(c);
file.get(c);
ret=-1;
return -1;
}
while(file.good() && (c >= '0') && (c <= '9'))
{
item *= 10;
item += int(c)-int('0');
file.get(c);
pos++;
ret=1;
}
if( pos ) data.push_back( item );
}
while( !file.eof() && c != '\n' );
return ret;
}//EOF ret 0 < ret -1 normal ret 1
int include_vec(vector<int>& p,vector<int>& m)
{
int pos=1;
for(vector<int>::iterator i=p.begin()+1;i<p.end();i++)
{
if(find(m.begin()+1,m.end(),*i)==m.end())
pos*=0;
}
return pos;
}
void genrule(double c)
{
ifstream infile("temp.dat");
int num_of_record=0;
int level=0;
vector< int > t1;
vector< vector<int>* >* p;
vector< int >*q;
vector <vector< vector<int>* >* > data;
data.clear();
read_a_line(infile,t1);
num_of_record=t1[0];
int ret;
double cc;
while(1)
{
ret=read_a_line(infile,t1);
if(ret==-1)//meet a new level
{
++level;
p=new vector< vector<int>* >;
data.push_back(p);
}
else if(ret==1)//normal
{
q=new vector< int >;
(*q)=t1;
p->push_back(q);
}
else if(ret==0)//meet end of file
{
break;
}
}
for(vector <vector< vector<int>* >* >::iterator i=data.begin();i<data.end();i++)
{
for(vector< vector<int>* >::iterator j=(**i).begin();j<(**i).end();j++)
{
for(vector <vector< vector<int>* >* >::iterator n=i+1;n<data.end();n++)
{
for(vector< vector<int>* >::iterator m=(**n).begin();m<(**n).end();m++)
{
sort((**j).begin()+1,(**j).end());
sort((**m).begin()+1,(**m).end());
// if( includes((**j).begin()+1,(**j).end(),(**m).begin()+1,(**m).end()))
if(include_vec((**j),(**m)))
{
// cout<<"(1) ";cout_vec((**j));cout<<"occ "<<(**j)[0]<<"bb:"<<*(**j).begin()<<endl;
// cout<<"(2) ";cout_vec((**m));cout<<"occ "<<(**m)[0]<<"bb:"<<*(**m).begin()<<endl;
cc=(*(**m).begin())/double((*(**j).begin()));
if ( cc>=c)
{
t1.clear();
t1=(**m);
//cout_vec(t1);
t1.erase(t1.begin());
// cout<<"before erase:";cout_vec(t1);cout<<endl;cout_vec((**j));
for(int i=1;i<(**j).size();i++)
{
int g=(**j)[i];
t1.erase(find(t1.begin(),t1.end(),(**j)[i]));
}
// cout<<"after erase:"; cout_vec(t1); cout<<endl;
for(vector<int>::iterator n=t1.begin();n<t1.end();n++)
cout<<*n<<" ";
cout<<" <- ";
for(n=(**j).begin()+1;n<(**j).end();n++)
cout<<*n<<" ";
cout<<setprecision(2)<<fixed<<"support:"<<double((*(**j).begin())*100)/num_of_record<<"%,confidence:"<<double(cc)*100<<"%\n";
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -