Monday, 28 November 2011

Question on Stateful Packet Inspection

Question on Stateful Packet Inspection

Hi all,

Am working on "Stateful Packet Inspection", but i donno how to proceed. Can any one give me guidence how to do it....

Thanks & Regards
Sandeep NS

How to Set, Displace and Attenuate Windows Password?

How to Set, Displace and Attenuate Windows Password?

Do you plan to amend to Windows 7 or buy a new Windows 7 computer in 2011? Here are some quick tips on how to set countersign for your Windows 7 machine, displace Windows countersign if you forgot Windows password, and attenuate Windows countersign if you ambition to skip the Windows logon awning in Windows 7.
How to set Windows password?
To actualize a Windows 7 password, it just as simple as you actualizes a Windows XP or Vista password.
Step 1. Bang "Start", "Control Panel", "User Accounts and Family Safety", "User Accounts".
Step 2. Bang "Create a password" beneath Accomplish changes to your user annual in User Annual Window.
Step 3. Input and access your Windows password.
Step 4. Access your countersign adumbration or leave it coffer and bang "Create password".
Please bethink to actualize a Windows 7 countersign displace disk, which can advice you displace Windows countersign if your countersign get forgotten.
How to displace Windows password?
When you forgot Windows password, you can use countersign displace deejay to displace Windows countersign if you accept one. Otherwise, you can resort to Windows Login Recovery, abnormally if you are bound out of computer.
Step 1. Download and install Windows Login Recovery.
Step 2. Burn a bootable CD/DVD or USB beam drive.
Step 3. BIOS settings.
Step 4. Displace Windows countersign beneath DOS.
Windows Login Accretion is a safe and reliable Windows countersign accretion apparatus which allows you to displace Windows countersign by afire a bootable CD/DVD or USB beam drive.
How to attenuate Windows password?
There are abounding means for you to attenuate Windows countersign if you are in need. Here shows how to attenuate Windows countersign by ascendancy userpasswords2.
Step 1. Bang Windows Key + R and access "control userpasswords2" in the advancing Run box.
Step 2. Press Access to pop up the archetypal User Accounts window.
Step 3. Uncheck the box in foreground of users have to access a user name and countersign to use this computer, baldest the user name and bang Apply to attenuate its password.
Step 4. Access and affirm the countersign for the called user name. Afresh bang OK button to accomplishment your operation.
Windows Countersign Tips
1. Set a able Windows countersign composed of letters, numbers and symbols and it should be 8 characters continued at least.
2. Don't accommodate claimed advice or a complete chat in your Windows countersign to in case that others calmly assumption your password.
3. Avoid accepted countersign like "123456", "password", etc. as these passwords can be calmly hacked.
4. Change or displace Windows countersign on a approved basis Article Search, like every ages or every 3 months.
5. Don't use your Windows countersign everywhere. It should be altered from added accounts.
6. Never address your Windows countersign down on addendum bashed to the computer screen.
7. Actualize a countersign displace deejay to in case you forgot Windows password.

how to repack an installed programe

how to repack an installed programe

hello *,
In fedora is it possible to get back the installed files of an application and install them on another machine. like i downloaded and installed vlc via "yum install vlc" but i want to retrieve back the installed files (rpms) for re installation because i have a very slow connection.

switching users in the terminal

switching users in the terminal

hey folks,
i would like to know how to switch between users when on the terminal. for example i can switch to root using "su" then type "password". but here i want to switch to other accounts not root and switching from root without using exit.

routing question / problem

routing question / problem

Internet Gateway
192.168.0.201

Server 1
192.168.0.101
192.168.1.101
192.168.2.101
gateway: 192.168.0.201
VIP: 192.168.1.100
VIP: 192.168.2.100

Server 2
192.168.0.102
192.168.1.102
192.168.2.102
gateway: 192.168.0.201

Client 1
192.168.2.201
gateway: 192.168.2.100

>From Client 1, I can ping 192.168.2.102 (Server 2), this would make sense all three computers are on the same network. However, from client 1, I cannot ping or ssh to 192.168.1.102 (server 2). Why? I don't know. Using wireshark, I can see the ICMP echo request go through server 1 and pass to server 2. This path makes sense. I see the echo request being recieved on the 192.168.2.102 NIC on Server 2. But no response is sent out on either NIC on Server 2. Why?

I have made no routing table modification on either server. I have IP forwarding set in sysctl.conf on both servers. I have iptables turned off. The only way I can ping from client 1 to 192.168.1.102 (server 2) is enabling masquerading in iptables on both servers on all interfaces. The question is: why can't client 1 ping to 192.168.1.102 with no modifications to any routing table and with the iptables service stopped?

MPI code urgent

MPI code urgent

I have this code for parallel implement an Apriori algorithm. This code is written in VC++. I want to change it to C code. Could you please please someone help me with this. I tried many times, and I am frustrated.

#include "stdio.h"
#include <fstream>
#include <iostream>
#include "stdlib.h"
#include "string.h"
#include <iomanip>
#include <time.h>
#include "mpi.h"

struct tItem
{
int tag;
char itemset[15];
int count;
struct tItem *next;
};

#define LEN sizeof(struct tItem);

int GetColNum(char fileName1[]); //¶ÁȡԴÊý¾ÝµÄÁÐÊý
int GetRecordNum(char fileName2[]); //¶ÁȡԴÊý¾ÝµÄÐÐÊý
int Index(char *List, char c, int ListLength);
void GetSourceFile(char fileName[],int recordNum,int colNum); //»ñȡԴÊý¾Ý
void FindFrequence1itemsets(char **fullSet1,double sup);
void Gen_association_rules(tItem *kf, tItem *p, double minCon); //Éú³É¹ØÁª¹æÔò
void SetminSup(); //ÉèÖÃ×îСֵ֧³Ö¶È
void SetminCon(); //ÉèÖÃ×îСÖÃÐŶÈ
struct tItem *Find_candidate_1itemsets(char **fullSet2, double sup2,int recordNum,int colNum); //Éú³ÉƵ·±1Ï
struct tItem *apriori_gen(tItem *freq); //Éú³ÉºòÑ¡Ï
struct tItem *Gen_candidate_itemset(tItem *cp,tItem *cp1,tItem *cp2); //Éú³ÉºóÑ¡Ïî
struct tItem *Gen_frequence(tItem *frequence, int recordNum, int colNum, int minNum, char **fullSet); //Éú³ÉƵ·±Ï
struct tItem *Gen_frequence1(tItem *frequence, int recordNum, int colNum, int minNum, char **fullSet);
struct tItem *Compute_candidateItem_Num(tItem *c,int recordNum, int colNum, char **fullSet); //¼ÆËãºòÑ¡ÏÖÐÿһÏîµÄ×îС֧³ÖÊý
struct tItem *Gen_kFrequence_subsets(tItem *f); //Éú³ÉƵ·±kÏÿÏîµÄ×Ó¼¯µÄ¼¯ºÏ
struct tItem *SubSet(char *List, int m, char *Buffer, int flag, tItem *fis, int ListLength); //Éú³ÉƵ·±¼¯ÖÐÿһÏîµÄ×Ó¼¯
struct tItem *AddToSubset(char *Buffer, int flag, tItem *fis); //½«Ò»¸ö×Ó¼¯¼ÓÈëÁ´±í
struct tItem *Combine_candidate_itemsets(tItem *lc, char rItemset, int rCount); //ºÏ²¢¾Ö²¿ºòÑ¡1Ï³ÉΪ×ܵĺòÑ¡1Ï
struct tItem *Combine_candidate_k_itemsets(tItem *lc,tItem *r);
bool Has_infrequence_subset(tItem *pp, tItem *f); //ÅжϺòÑ¡kÏµÄ×Ó¼¯ÊÇ·ñÔÚÆµ·±k-1ÏÖÐ
bool Is_before_equal(tItem *pp1, tItem *pp2); //ÅжÏÁ½¸öÏîÄ¿¼¯µÄǰk-1ÏîÊÇ·ñÏàͬ
static void masterprocess(int rankNum);
static void slaveprocess(int rankNum);

char **fullSet;
int colNum=0;
int recordNum=0;
double minSup=0.37;
double minCon=0.50;

int main(int argc,char *argv[])
{
int rank,size;

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);

if(rank==0)
{
//printf("#%d#\n",size);
masterprocess(size);
}
else
{
slaveprocess(size);
}

MPI_Finalize();
return(0);
}

void SetminSup()
{
cout<<"Please input the minSup: ";
cin>>minSup;
}

void SetminCon()
{
cout<<"Please input the minCon: ";
cin>>minCon;
}

int GetColNum(char fileName1[]) //¶ÁȡԴÊý¾ÝµÄÁÐÊý
{
ifstream file(fileName1);

char ch;
//int colNum=0;
while(ch!='\n')
{
if(ch==',')
{
colNum++;
ch=file.get();
}
ch=file.get();
}
//colNum++;
file.close();
return colNum;
}


int GetRecordNum(char fileName2[]) //¶ÁȡԴÊý¾ÝµÄÐÐÊý
{
ifstream file(fileName2);

char ch=NULL;
//int recordNum=0;

while(!file.eof())
{
if(ch=='\n')
{
recordNum++;
ch=file.get();
}
ch=file.get();
}

file.close();
return recordNum;
}

void GetSourceFile(char fileName[],int rNum,int cNum) //»ñȡԴÊý¾Ý¶ÁÈëÊý×éfullSet[][]ÖÐ
{
ifstream file(fileName);

char ch;
//char **fullSet;
int item=0;
int i=0,j=0;
int temp1='A';
int temp2='a';

/*b=(int**)malloc(row*sizeof(int*));
for(i=0;i<row;i++)
{
b[i]=(int*)malloc(col*sizeof(int));
}*/

fullSet=(char**)malloc(rNum*sizeof(char*));
for(int m=0;m<rNum;m++)
{
fullSet[m]=(char*)malloc(cNum*sizeof(char));
}

while(i<rNum)
{
while(j<colNum)
{
if(ch==',')
{
item++;
ch=file.get();
if(ch=='T')
{
fullSet[i][j]=(char)(item+temp1);
//printf("%c",fullSet[i][j]);
}
if(ch=='F')
{
fullSet[i][j]=(char)(item+temp2);
//printf("%c",fullSet[i][j]);
}
j++;
}
ch=file.get();
}
//printf("\n");
j=0;
ch=file.get();
item=0;
i++;
}
file.close();
}

static void masterprocess(int rankNum)
{

char inputFileName[]="c:\\shujuku.txt";
char *buffer;
int colNum,recordNum,blockNum,bound,i,j,m,k;
int rank,destRank,tag;
double starttime,endtime;

MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
starttime=MPI_Wtime();

//SetminSup();
//SetminCon();

//printf("#%d#\n",rankNum);

colNum=GetColNum(inputFileName);
recordNum=GetRecordNum(inputFileName);

//system("pause");
printf("recordNum= %d", recordNum);
printf("\n");
printf("colNum= %d",colNum);
printf("\n");

GetSourceFile(inputFileName,recordNum,colNum);

//system("pause");

/*for(i=0;i<recordNum;i++)
{
for(j=0;j<colNum;j++)
{
printf(" %c ",fullSet[i][j]);
}
printf("\n");
}*/

blockNum=recordNum/(rankNum-1);
bound=blockNum*(rankNum-1);
//printf("%d\n",blockNum);

m=0;
k=1;
destRank=1;
tag=1;
buffer=(char*)malloc(colNum*sizeof(char*));
while(m!=recordNum)
{
if(m==(k*blockNum-1)&&(m!=bound-1))
{
MPI_Send(&colNum,1,MPI_INT,destRank,100,MPI_COMM_W ORLD);
MPI_Send(&recordNum,1,MPI_INT,destRank,101,MPI_COM M_WORLD);
MPI_Send(&blockNum,1,MPI_INT,destRank,tag,MPI_COMM _WORLD);
//printf("%d\n",blockNum);
for(i=((k-1)*blockNum);i<k*blockNum;i++)
{
for(j=0;j<colNum;j++)
{
buffer[j]=fullSet[i][j];
printf("%c ",buffer[j]);
}
MPI_Send(buffer,colNum,MPI_CHAR,destRank,tag,MPI_C OMM_WORLD);
printf("\n");
}
printf("\n");
destRank++;
tag++;
k++;
}
else if(m==bound-1)
{
blockNum=recordNum-m-1+blockNum;
MPI_Send(&colNum,1,MPI_INT,destRank,100,MPI_COMM_W ORLD);
MPI_Send(&recordNum,1,MPI_INT,destRank,101,MPI_COM M_WORLD);
MPI_Send(&blockNum,1,MPI_INT,destRank,tag,MPI_COMM _WORLD);
//MPI_Send(&flag,1,MPI_INT,destRank,102,MPI_COMM_WOR LD);
//printf("%d\n",blockNum);
for(i=bound-blockNum;i<recordNum;i++)
{
for(j=0;j<colNum;j++)
{
buffer[j]=fullSet[i][j];
printf("%c ",buffer[j]);
}
MPI_Send(buffer,colNum,MPI_CHAR,destRank,tag,MPI_C OMM_WORLD);
printf("\n");
}
printf("\n");
}

m++;
}


/*int s,rItemNum;
tItem *r;
r=(struct tItem*)malloc(sizeof(struct tItem));

s=0;
MPI_Recv(&rItemNum,1,MPI_INT,1,1000,MPI_COMM_WORLD ,&status);
while(s<rItemNum)
{
for(j=0;j<=5;j++)
{
MPI_Recv(&r->itemset[j],1,MPI_CHAR,1,1001,MPI_COMM_WORLD,&status);
}
MPI_Recv(&r->count,1,MPI_INT,1,1002,MPI_COMM_WORLD,&status);
MPI_Recv(&r->tag,1,MPI_INT,0,1003,MPI_COMM_WORLD,&status);
s++;
}*/

endtime=MPI_Wtime();
printf("The master process tooks %f seconds.\n",endtime-starttime);
printf("\n");
}

static void slaveprocess(int rankNum)
{

int rowNum,recordNum,colNum,tag,stag,rank,destRank,m,i ,j;
char **fSet,*buffer;
double minSup=0.45;
double minCon=0.50;
double starttime,endtime;

MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
starttime=MPI_Wtime();

MPI_Recv(&colNum,1,MPI_INT,0,100,MPI_COMM_WORLD,&s tatus);
MPI_Recv(&recordNum,1,MPI_INT,0,101,MPI_COMM_WORLD ,&status);
//printf("%d\n",recordNum);
//printf("%d\n",colNum);

tag=rank;
MPI_Recv(&rowNum,1,MPI_INT,0,tag,MPI_COMM_WORLD,&s tatus);
printf("\n");
printf("\n");
printf("The block in rank %d has %d records.\n",rank,rowNum);
//MPI_Recv(&flag,1,MPI_INT,0,102,MPI_COMM_WORLD,&sta tus);

buffer=(char*)malloc(colNum*sizeof(char*));
fSet=(char**)malloc(rowNum*sizeof(char*));
for(m=0;m<rowNum;m++)
{
fSet[m]=(char*)malloc(colNum*sizeof(char));
}

//½ÓÊÕ½ø³Ì0·¢ËÍÀ´µÄ³õʼ¾ØÕóµÄÒ»¿é
for(i=0;i<rowNum;i++)
{
MPI_Recv(buffer,colNum,MPI_CHAR,0,tag,MPI_COMM_WOR LD,&status);
for(j=0;j<colNum;j++)
{
fSet[i][j]=buffer[j];
}
}

printf("\n");
printf("Rank %d receives part of the matrix is as follow:\n",rank);
printf("\n");
for(i=0;i<rowNum;i++)
{
for(j=0;j<colNum;j++)
{
printf("%c ",fSet[i][j]);
}
printf("\n");
}
printf("\n");

tItem *c; //¶¨Òå¾Ö²¿ºòÑ¡Ï
tItem *cr; //½ÓÊÕÆäËû½ø³Ì·¢ËÍÀ´µÄ¾Ö²¿ºòÑ¡¼¯
tItem *p;
int count=0,s,rCount,rTag;
char rItemset;


c=(struct tItem*)malloc(sizeof(struct tItem));
c=Find_candidate_1itemsets(fSet,minSup,rowNum,colN um);

destRank=1;
stag=1;

p=c;
while(p!=NULL)
{
count++;
p=p->next;
}

for(i=1;i<=rankNum-1;i++) //ÏòÆäËû½ø³Ì·¢Ë;ֲ¿ºòÑ¡1Ï
{
p=c;
if(i!=rank)
{
MPI_Send(&count,1,MPI_INT,destRank,14,MPI_COMM_WOR LD);
while(p!=NULL)
{
MPI_Send(&p->itemset[p->tag],1,MPI_CHAR,destRank,15,MPI_COMM_WORLD);
MPI_Send(&p->count,1,MPI_INT,destRank,16,MPI_COMM_WORLD);
MPI_Send(&p->tag,1,MPI_INT,destRank,17,MPI_COMM_WORLD);
p=p->next;
}
}
destRank++;
stag++;
}

int reRank=1,reTag=1,itemNum;
for(j=1;j<=rankNum-1;j++) //½ÓÊÕÆäËû½ø³Ì·¢ËÍÀ´µÄ¾Ö²¿ºòÑ¡1Ï
{
if(j!=rank)
{
s=0;
MPI_Recv(&itemNum,1,MPI_INT,reRank,14,MPI_COMM_WOR LD,&status);
while(s<itemNum)
{
MPI_Recv(&rItemset,1,MPI_CHAR,reRank,15,MPI_COMM_W ORLD,&status);
MPI_Recv(&rCount,1,MPI_INT,reRank,16,MPI_COMM_WORL D,&status);
MPI_Recv(&rTag,1,MPI_INT,reRank,17,MPI_COMM_WORLD, &status);

c=Combine_candidate_itemsets(c,rItemset,rCount);

//printf(" %c",rItemset);
//printf(" %d",rCount);
//printf(" %d",rTag);
//printf("\n");
s++;
}
printf("\n");
}
reRank++;
reTag++;
}

//Êä³öºÏ²¢ºóµÃµ½µÄÈ«²¿ºòÑ¡1Ï
p=c;
printf("Now every rank get the whole candidate itemsets as follow:\n\n");
while(p!=NULL)
{
printf(" %c",p->itemset[p->tag]);
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}

//ÓɺòÑ¡1ÏÉú³ÉƵ·±1Ï
tItem *pp,*fHead,*fp,*temp;
int minNum;

fp=fHead=(struct tItem*)malloc(sizeof(struct tItem));
minNum=(int)((recordNum*minSup)+1);
//printf("%d",minNum);
pp=c;

while(pp!=NULL)
{
if(pp->count>minNum)
{
fHead->count=pp->count;
fHead->tag=pp->tag;
fHead->itemset[fHead->tag]=pp->itemset[pp->tag];
fHead->next=NULL;
break;
}
pp=pp->next;
}

fp=fHead;
pp=pp->next;

while(pp!=NULL)
{
if(pp->count>minNum)
{
temp=(struct tItem*)malloc(sizeof(struct tItem));
temp->count=pp->count;
temp->next=NULL;
temp->tag=pp->tag;
temp->itemset[temp->tag]=pp->itemset[pp->tag];
fp->next=temp;
fp=temp;
//printf("%c",pp->itemset[pp->tag]);
}
pp=pp->next;
}

/*printf("\n");
printf("--------The local frequence 1_itemsets--------\n");
fp=fHead;
while(fp!=NULL)
{
printf(" %c",fp->itemset[fp->tag]);
printf(" %d",fp->count);
printf(" %d",fp->tag);
printf("\n");
fp=fp->next;
}*/

tItem *f1,*kFrequence,*kf,*fis,*kfTemp;

//kFrequence=(struct tItem*)malloc(sizeof(struct tItem));
f1=(struct tItem*)malloc(sizeof(struct tItem));
//f1=Find_frequence_1itemsets(fullSet,minSup);

f1=fHead;

//system("pause");
//printf(" %d",rowNum);
//printf(" %d*&*&*&\n",colNum);
kFrequence=Gen_frequence(f1,rowNum,colNum,minNum,f Set);//¾*¹ýÁ¬½ÓºÍ¼ôÖ¦Éú³É×îÖյįµ·±kÏ

i=2;
while(i<=5)
{
kfTemp=Gen_frequence(kFrequence,rowNum,colNum,minN um,fSet);
if(kfTemp==NULL)
{
break;
}
kFrequence=kfTemp;
i++;
}
//MPI_Barrier(MPI_COMM_WORLD);
/*printf("^^^^^^^^^^^^^^^\n");
kf=kFrequence;
while(kf!=NULL)
{
for(j=0;j<=kf->tag;j++)
{
printf(" %c",kf->itemset[j]);
}
printf(" %d",kf->count);
printf(" %d",kf->tag);
printf("\n");
kf=kf->next;
}
printf("^^^^^^^^^^^^^^^\n");*/


printf("\n");
kf=kFrequence;
printf("--------The frequence %d_itemsets--------\n",kf->tag+1);
while(kf!=NULL)
{
for(j=0;j<=kf->tag;j++)
{
printf(" %c",kf->itemset[j]);
}
printf(" %d",kf->count);
printf(" %d",kf->tag);
printf("\n");
kf=kf->next;
}
printf("\n");

/*kf=kFrequence;
int kItemNum=0;
while(kf!=NULL)
{
kItemNum++;
kf=kf->next;
}

kf=kFrequence;
if(rank==1)
{
MPI_Send(&kItemNum,1,MPI_INT,0,1000,MPI_COMM_WORLD );
while(kf!=NULL)
{
for(j=0;j<=kf->tag;j++)
{
MPI_Send(&kf->itemset[j],1,MPI_CHAR,0,1001,MPI_COMM_WORLD);
}
MPI_Send(&kf->count,1,MPI_INT,0,1002,MPI_COMM_WORLD);
MPI_Send(&kf->tag,1,MPI_INT,0,1003,MPI_COMM_WORLD);
kf=kf->next;
}
}*/

kf=kFrequence;
printf("\n\nThe subset of the frequence is:\n\n");
while(kf!=NULL)
{

fis=Gen_kFrequence_subsets(kf); //Éú³ÉƵ·±kÏÿÏîµÄ×Ó¼¯µÄ¼¯ºÏ
fis=Compute_candidateItem_Num(fis,rowNum,colNum,fS et); //¼ÆËãÿһ¸ö×Ó¼¯µÄÖ§³Ö¶È

/*p=fis;
p=p->next;
while(p!=NULL)
{
for(i=0;i<=p->tag;i++)
{
printf(" %c",p->itemset[i]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}*/

printf("\n\nNow we get the association rules:\n\n");
p=fis;
p=p->next;
while(p!=NULL)
{
//printf("\n");
Gen_association_rules(kf,p,minCon);
printf("\n");
p=p->next;
}

kf=kf->next;
}
endtime=MPI_Wtime();
printf("The slave process %d tooks %f seconds.\n",rank,endtime-starttime);
printf("\n");

}

struct tItem *Gen_frequence(tItem *frequence, int recordNum, int colNum, int minNum, char **fullSet) //Éú³ÉƵ·±Ï
{

tItem *candidate,*cp,*fp,*fpb,*p,*p1;
int i,j,k,m,count=0,rank,rankNum,destRank,stag;
//int i,m,n;
//char *buffer;
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&rankNum);

/*printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("##### %d\n",recordNum);
printf("##### %d\n",colNum);
printf("##### %d\n",minNum);
for(i=0;i<recordNum;i++)
{
for(j=0;j<colNum;j++)
{
printf(" %c",fullSet[i][j]);
}
printf("\n");
}
p=(struct tItem*)malloc(sizeof(struct tItem));
p=frequence;
while(p!=NULL)
{
printf(" %c",p->itemset[p->tag]);
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");*/


//for(k=2;frequence!=NULL;k++)
//while(candidate!=NULL)
//{
//printf("++++++++++++++++++++++++++++++++++++++++++ ++\n");

candidate=apriori_gen(frequence);

if(candidate!=NULL)
{
candidate=Compute_candidateItem_Num(candidate,reco rdNum,colNum,fullSet);

destRank=1;
stag=1;

p=candidate;
p1=candidate;
while(p!=NULL)
{
count++;
p=p->next;
}
//printf(" #%d#\n",count);

//MPI_Barrier(MPI_COMM_WORLD);

for(i=1;i<=rankNum-1;i++) //ÏòÆäËû½ø³Ì·¢Ë;ֲ¿ºòÑ¡kÏ
{
p=candidate;
if(i!=rank)
{
MPI_Send(&count,1,MPI_INT,destRank,24,MPI_COMM_WOR LD);
while(p!=NULL)
{
for(j=0;j<=p->tag;j++)
{
MPI_Send(&p->itemset[j],1,MPI_CHAR,destRank,25,MPI_COMM_WORLD);
}

MPI_Send(&p->count,1,MPI_INT,destRank,26,MPI_COMM_WORLD);
MPI_Send(&p->tag,1,MPI_INT,destRank,27,MPI_COMM_WORLD);
p=p->next;
}
}
destRank++;
stag++;
}

//MPI_Barrier(MPI_COMM_WORLD);

int reRank=1,reTag=1,itemNum;
int rCount,rTag,s;
char rItemset;
tItem *r;
r=(struct tItem*)malloc(sizeof(struct tItem));
for(j=1;j<=rankNum-1;j++) //½ÓÊÕÆäËû½ø³Ì·¢ËÍÀ´µÄ¾Ö²¿ºòÑ¡kÏ
{
if(j!=rank)
{
s=0;
MPI_Recv(&itemNum,1,MPI_INT,reRank,24,MPI_COMM_WOR LD,&status);
while(s<itemNum)
{
for(m=0;m<=p1->tag;m++)
{
MPI_Recv(&r->itemset[m],1,MPI_CHAR,reRank,25,MPI_COMM_WORLD,&status);
//printf(" %c",r->itemset[m]);
}

MPI_Recv(&r->count,1,MPI_INT,reRank,26,MPI_COMM_WORLD,&status) ;
MPI_Recv(&r->tag,1,MPI_INT,reRank,27,MPI_COMM_WORLD,&status) ;


candidate=Combine_candidate_k_itemsets(candidate,r );

//printf(" %c",rItemset);
//printf(" %d",r->count);
//printf(" %d",r->tag);
//printf("\n");
s++;
}
//printf("\n");
//printf("&&&&&&&&&&&&&&&&&&&&&\n");
}
reRank++;
reTag++;
}

//MPI_Barrier(MPI_COMM_WORLD);

/*cp=candidate;
count=0;
printf("--------The candidate %d_itemsets--------\n",cp->tag+1);
while(cp!=NULL)
{
for(j=0;j<=cp->tag;j++)
{
printf(" %c",cp->itemset[j]);
}
printf(" %d",cp->count);
printf(" %d",cp->tag);
printf("\n");
count++;
cp=cp->next;
}
printf("\n");
printf("The total number is: %d\n",count);
printf("\n");*/

//MPI_Barrier(MPI_COMM_WORLD);

frequence=candidate;
fpb=(struct tItem*)malloc(sizeof(struct tItem));
fp=(struct tItem*)malloc(sizeof(struct tItem));
fpb=frequence;
fp=fpb->next;
//int minNum=(int)((recordNum*minSup)+1);
//printf("########## %d\n",minNum);

while(fp!=NULL) //ɾ³ýºóÑ¡ÏÖÐÖ§³Ö¶ÈСÓÚ×îС֧³Ö¶ÈµÄÏîÄ¿£¬Éú³ÉƵ·± Ï
{

if(fpb->count<minNum)
{
frequence=fp;
fpb=fp;
fp=fp->next;
}


if(fp->count<minNum)
{
fp=fp->next;
fpb->next=fp;
}
else
{
fp=fp->next;
fpb=fpb->next;

}
}

/*fp=frequence;
count=0;
printf("--------The frequence %d_itemsets--------\n",fp->tag+1);
while(fp!=NULL)
{
//MPI_Barrier(MPI_COMM_WORLD);
for(j=0;j<=fp->tag;j++)
{
printf(" %c",fp->itemset[j]);
}
printf(" %d",fp->count);
printf(" %d",fp->tag);
printf("\n");
count++;
fp=fp->next;
}

printf("\n");
printf("The total number is: %d\n",count);
printf("\n");*/

//MPI_Barrier(MPI_COMM_WORLD);
}
else
{
//return (NULL);
//break;
frequence=NULL;
}
//printf("++++++++++++++++++++++++++++++++++++++++++ ++\n");
//MPI_Barrier(MPI_COMM_WORLD);
//}

return (frequence);

}

struct tItem *Gen_frequence1(tItem *frequence, int recordNum, int colNum, int minNum, char **fullSet) //Éú³ÉƵ·±Ï
{

tItem *candidate,*cp,*fp,*fpb,*p,*p1;
int i,j,k,m,count=0,rank,rankNum,destRank,stag;
//int i,m,n;
//char *buffer;
MPI_Status status;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&rankNum);

//printf("****************************************** *\n");

/*printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("##### %d\n",recordNum);
printf("##### %d\n",colNum);
printf("##### %d\n",minNum);
printf("##### %d\n",rank);
for(i=0;i<recordNum;i++)
{
for(j=0;j<colNum;j++)
{
printf(" %c",fullSet[i][j]);
}
printf("\n");
}
p=(struct tItem*)malloc(sizeof(struct tItem));
p=frequence;
while(p!=NULL)
{
for(j=0;j<=p->tag;j++)
{
printf(" %c",p->itemset[j]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}
printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");*/

//for(k=2;frequence!=NULL;k++)
//while(candidate!=NULL)
//{
printf("++++++++++++++++++++++++++++++++++++++++++ ++\n");

candidate=apriori_gen(frequence);

/*p=candidate;
int t=0;
printf("²âÊÔ½á¹û\n");
while(p!=NULL)
{
for(j=0;j<=p->tag;j++)
{
printf(" %c",p->itemset[j]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
t++;
p=p->next;
}
printf("Ò»¹²ÓÐ %d\n",t);
printf("½áÊø²âÊÔ\n");*/


/*if(rank==2)
{
printf("!!!!!!\n");
p=candidate;
while(p!=NULL)
{
for(j=0;j<=p->tag;j++)
{
printf(" %c",p->itemset[j]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}
}

printf("!!!!!!\n");*/


if(candidate!=NULL)
{
//printf("!!!!!!\n");
candidate=Compute_candidateItem_Num(candidate,reco rdNum,colNum,fullSet);

destRank=1;
stag=1;

p=candidate;
p1=candidate;
while(p!=NULL)
{
count++;
p=p->next;
}
//printf(" #%d#\n",count);
//printf("½øÐе½ÕâÀï\n");

//MPI_Barrier(MPI_COMM_WORLD);

for(i=1;i<=rankNum-1;i++) //ÏòÆäËû½ø³Ì·¢Ë;ֲ¿ºòÑ¡kÏ
{
p=candidate;
if(i!=rank)
{
MPI_Send(&count,1,MPI_INT,destRank,54,MPI_COMM_WOR LD);
//printf("### %d ###\n",count);
while(p!=NULL)
{
for(j=0;j<=p->tag;j++)
{
MPI_Send(&p->itemset[j],1,MPI_CHAR,destRank,55,MPI_COMM_WORLD);
//printf(" %c",p->itemset[j]);
}

MPI_Send(&p->count,1,MPI_INT,destRank,56,MPI_COMM_WORLD);
MPI_Send(&p->tag,1,MPI_INT,destRank,57,MPI_COMM_WORLD);
//printf(" %d",p->count);
//printf(" %d",p->tag);
//printf("\n");
p=p->next;
}
}
destRank++;
stag++;
}

//MPI_Barrier(MPI_COMM_WORLD);

int reRank=1,reTag=1,itemNum;
int rCount,rTag,s;
char rItemset;
tItem *r;
r=(struct tItem*)malloc(sizeof(struct tItem));
for(j=1;j<=rankNum-1;j++) //½ÓÊÕÆäËû½ø³Ì·¢ËÍÀ´µÄ¾Ö²¿ºòÑ¡kÏ
{
if(j!=rank)
{
s=0;
MPI_Recv(&itemNum,1,MPI_INT,reRank,54,MPI_COMM_WOR LD,&status);
while(s<itemNum)
{
for(m=0;m<=p1->tag;m++)
{
MPI_Recv(&r->itemset[m],1,MPI_CHAR,reRank,55,MPI_COMM_WORLD,&status);
//printf(" %c",r->itemset[m]);
}

MPI_Recv(&r->count,1,MPI_INT,reRank,56,MPI_COMM_WORLD,&status) ;
MPI_Recv(&r->tag,1,MPI_INT,reRank,57,MPI_COMM_WORLD,&status) ;


candidate=Combine_candidate_k_itemsets(candidate,r );

//printf(" %c",rItemset);
//printf(" %d",r->count);
//printf(" %d",r->tag);
//printf("\n");
s++;
}
//printf("\n");
printf("&&&&&&&&&&&&&&&&&&&&&\n");
}
reRank++;
reTag++;
}

//MPI_Barrier(MPI_COMM_WORLD);

cp=candidate;
count=0;
printf("--------The candidate %d_itemsets--------\n",cp->tag+1);
while(cp!=NULL)
{
for(j=0;j<=cp->tag;j++)
{
printf(" %c",cp->itemset[j]);
}
printf(" %d",cp->count);
printf(" %d",cp->tag);
printf("\n");
count++;
cp=cp->next;
}
printf("\n");
printf("The total number is: %d\n",count);
printf("\n");

//MPI_Barrier(MPI_COMM_WORLD);

frequence=candidate;
fpb=(struct tItem*)malloc(sizeof(struct tItem));
fp=(struct tItem*)malloc(sizeof(struct tItem));
fpb=frequence;
fp=fpb->next;
//int minNum=(int)((recordNum*minSup)+1);
//printf("########## %d\n",minNum);

while(fp!=NULL) //ɾ³ýºóÑ¡ÏÖÐÖ§³Ö¶ÈСÓÚ×îС֧³Ö¶ÈµÄÏîÄ¿£¬Éú³ÉƵ·± Ï
{

if(fpb->count<minNum)
{
frequence=fp;
fpb=fp;
fp=fp->next;
}


if(fp->count<minNum)
{
fp=fp->next;
fpb->next=fp;
}
else
{
fp=fp->next;
fpb=fpb->next;

}
}

fp=frequence;
count=0;
printf("--------The frequence %d_itemsets--------\n",fp->tag+1);
while(fp!=NULL)
{
//MPI_Barrier(MPI_COMM_WORLD);
for(j=0;j<=fp->tag;j++)
{
printf(" %c",fp->itemset[j]);
}
printf(" %d",fp->count);
printf(" %d",fp->tag);
printf("\n");
count++;
fp=fp->next;
}

printf("\n");
printf("The total number is: %d\n",count);
printf("\n");

//MPI_Barrier(MPI_COMM_WORLD);
}
else
{
//return (NULL);
//break;
//frequence=NULL;
}
//printf("++++++++++++++++++++++++++++++++++++++++++ ++\n");
//MPI_Barrier(MPI_COMM_WORLD);
//}

return (frequence);

}

bool Has_infrequence_subset(tItem *pp, tItem *f) //ÅжϺòÑ¡kÏµÄ×Ó¼¯ÊÇ·ñÔÚÆµ·±k-1ÏÖÐ
{
tItem *p,*fp; //´¢´æ*ppÖеÄk-1Ïî×Ó¼¯
int i=0,j,m=0;
bool flag;

while(i<=pp->tag)
{

p=(struct tItem*)malloc(sizeof(struct tItem));

for(j=0;j<pp->tag;j++)
{
if(j==i)
{
j++;
}
else
{
p->itemset[j]=pp->itemset[j];
}
}

fp=f;
while(fp!=NULL)
{
while(m<=fp->tag)
{
if(p->itemset[m]==fp->itemset[m])
{
m++;
}
else
{
flag=false;
m++;
}
}

flag=true;
fp=fp->next;
}

i++;
}


return (flag);
}

struct tItem *Gen_candidate_itemset(tItem *cp,tItem *cp1,tItem *cp2) //Éú³ÉºóÑ¡Ïî
{
int i=0;

while(i<=cp1->tag)
{
cp->itemset[i]=cp1->itemset[i];
//cp->tag=cp1->tag+1;
i++;
}

cp->tag=cp1->tag+1;
cp->itemset[i]=cp2->itemset[i-1];
cp->count=0;
cp->next=NULL;

return (cp);
}

bool Is_before_equal(tItem *pp1, tItem *pp2) //ÅжÏÁ½¸öÏîÄ¿¼¯µÄǰk-1ÏîÊÇ·ñÏàͬ
{
int i=0;
bool flag;

while(i<pp1->tag)
{
if(pp1->itemset[i]==pp2->itemset[i])
{
flag=true;
}
else
{
flag=false;
break;
}
i++;
}

return (flag);
}

struct tItem *Compute_candidateItem_Num(tItem *c,int recordNum, int colNum, char **fullSet) //¼ÆËãºòÑ¡ÏÖÐÿһÏîµÄ×îС֧³ÖÊý
{
tItem *cp;
int i,j,m,n;
char *buffer;

cp=c;

while(cp!=NULL) //ͳ¼ÆÃ¿¸öºòÑ¡ÏµÄ¼ÆÊý
{
for(i=0;i<recordNum;i++)
{

bool flag=true;
buffer=(char*)malloc(colNum*sizeof(char*));

for(j=0;j<colNum;j++)
{
buffer[j]=fullSet[i][j];
}

m=0;
while(m<=cp->tag)
{
bool flag1=false;
for(n=0;n<colNum;n++)
{
if(cp->itemset[m]==buffer[n])
{
flag1=true;
break;
}

flag1=false;
}

if(flag1==false)
{
flag=false;
}
m++;
}

if(flag==true)
{
cp->count++;
}
}

cp=cp->next;
}

return (c);
}

struct tItem *apriori_gen(tItem *freq) //Éú³ÉºòÑ¡Ï
{
tItem *p1,*p2,*head,*cHead,*p,*pTail;
int tag,i=0;
//bool flag;

if(freq->next!=NULL)
{

head=freq;
p1=head;
p2=head;
p2=p2->next;

p=(struct tItem*)malloc(sizeof(struct tItem));
tag=p1->tag+1;

if(tag==1)//Éú³ÉºòÑ¡2Ï
{
//printf("############\n");
while(i<=tag)
{
if(i<=tag-1)
{
//p->count=p1->count;
p->itemset[i]=p1->itemset[i];
p->tag=tag;
}
else
{
//p->count=p2->count;
p->itemset[i]=p2->itemset[i-1];
p->tag=tag;
}
i++;
}
p->count=0;
p->next=NULL;

/*printf(" %c",p->itemset[0]);
printf(" %c",p->itemset[1]);
printf(" %d",p->tag);*/

pTail=p;
cHead=p;
p2=p2->next;
//printf("#%c#",p1->itemset[p1->tag]);

while(p1!=NULL)
{
while(p2!=NULL)
{
p=(struct tItem*)malloc(sizeof(struct tItem));
tag=p1->tag+1;
i=0;

while(i<=tag)
{
if(i<=tag-1)
{
//p->count=p1->count;
p->itemset[i]=p1->itemset[i];
//printf("%c",p->itemset[i]);
p->tag=tag;
}
else
{
//p->count=p2->count;
p->itemset[i]=p2->itemset[i-1];
//printf("%c",p->itemset[i]);
p->tag=tag;
}
i++;
}
p->count=0;
p->next=NULL;

//flag=Has_infrequence_subset(cHead,freq);

//if(flag==true)
//{
pTail->next=p;
pTail=p;
//}
p2=p2->next;
}

p1=p1->next;
p2=p1->next;

if(p2==NULL)
{
break;
}
}
}
/*else if(p1->tag==3)
{
if(Is_before_equal(p1,p2))
{
//printf("½øÐе½ÕâÀï\n");
//p=(struct tItem*)malloc(sizeof(struct tItem));
//cHead=(struct tItem*)malloc(sizeof(struct tItem));
//pTail=(struct tItem*)malloc(sizeof(struct tItem));

p=Gen_candidate_itemset(p,p1,p2);
pTail=p;
cHead=p;
p2=p2->next;


while((p1!=NULL)&&(p2!=NULL))
{
//while(Is_before_equal(p1,p2))
while(p2!=NULL)
{
if(Is_before_equal(p1,p2))
{
p=(struct tItem*)malloc(sizeof(struct tItem));
tag=p1->tag+1;

p=Gen_candidate_itemset(p,p1,p2);

if(Has_infrequence_subset(p, freq))
{
pTail->next=p;
pTail=p;
}
}
//printf("½øÐе½ÕâÀï\n");
p2=p2->next;

}

p1=p1->next;
p2=p1->next;
}
}
//printf("½øÐе½ÕâÀï\n");
}*/
else//Éú³ÉºîÑ¡2ÏÒÔÉϵĺòÑ¡¼¯(±ê¼ÇcHeadʱºòÓÐÎÊÌâ)
{

/*while(p2!=NULL)
{
if(Is_before_equal(p1,p2))
{
break;
}
p2=p2->next;
}*/

if(Is_before_equal(p1,p2))
{
//p=(struct tItem*)malloc(sizeof(struct tItem));
//cHead=(struct tItem*)malloc(sizeof(struct tItem));
//pTail=(struct tItem*)malloc(sizeof(struct tItem));

p=Gen_candidate_itemset(p,p1,p2);
pTail=p;
cHead=p;
p2=p2->next;


while((p1!=NULL)&&(p2!=NULL))
{
//while(Is_before_equal(p1,p2))
while(p2!=NULL)
{
if(Is_before_equal(p1,p2))
{
p=(struct tItem*)malloc(sizeof(struct tItem));
tag=p1->tag+1;

p=Gen_candidate_itemset(p,p1,p2);

if(Has_infrequence_subset(p, freq))
{
pTail->next=p;
pTail=p;
}
}

p2=p2->next;

}

p1=p1->next;
p2=p1->next;
}
}
else
{
p1=p1->next;
p2=p2->next;
p=Gen_candidate_itemset(p,p1,p2);
pTail=p;
cHead=p;
p2=p2->next;


while((p1!=NULL)&&(p2!=NULL))
{
while(Is_before_equal(p1,p2))
{
p=(struct tItem*)malloc(sizeof(struct tItem));
tag=p1->tag+1;

p=Gen_candidate_itemset(p,p1,p2);

if(Has_infrequence_subset(p, freq))
{
pTail->next=p;
pTail=p;
}

p2=p2->next;

}

p1=p1->next;
p2=p1->next;
}
//cHead=NULL;
}
}
}
else
{
cHead=NULL;
}
/*tItem *pp;
int j,count=0;

pp=cHead;
printf("--------The candidate %d_itemsets--------\n",pp->tag+1);
while(pp!=NULL)
{
for(j=0;j<=tag;j++)
{
printf(" %c",pp->itemset[j]);
}
printf(" %d",pp->count);
printf(" %d",pp->tag);
printf("\n");
count++;
pp=pp->next;
}
printf("\n");
printf("The total number is: %d\n",count);
printf("\n");*/

return (cHead);
}

struct tItem *Combine_candidate_k_itemsets(tItem *lc,tItem *r)
{
tItem *p;
int i,j;
bool flag,flagj;

//printf("**************************\n");
p=lc;
while(p!=NULL)
{
//flag=true;
for(i=0;i<=r->tag;i++)
{
flagj=false;
for(j=0;j<=p->tag;j++)
{
if(p->itemset[j]==r->itemset[i])
{
flagj=true;
break;
}
}
if(flagj==false)
{
flag=false;
break;
}
else
{
flag=true;
}
}
if(flag==true)
{
p->count=p->count+r->count;
break;
}
p=p->next;
}

return (lc);
}

struct tItem *Combine_candidate_itemsets(tItem *lc, char rItemset, int rCount)
{
tItem *p;

p=lc;
while(p!=NULL)
{
if(p->itemset[p->tag]==rItemset)
{
p->count=p->count+rCount;
}
p=p->next;
}

return (lc);
}

struct tItem *Find_candidate_1itemsets(char **fullSet2, double sup2,int recordNum,int colNum) //Éú³ÉƵ·±1Ï
{
tItem *cHead,*fHead;
tItem *p1,*pHead,*pTail,*p;
tItem *fp,*temp,*pp;
fp=fHead=(struct tItem*)malloc(sizeof(struct tItem));

int i,j,count=0;
bool flag;

p=pHead=pTail=(struct tItem*)malloc(sizeof(struct tItem));
cHead=NULL;
pHead->tag=0;
pHead->itemset[pHead->tag]=fullSet2[0][0];
pHead->count=0;
pHead->next=NULL;


int minNum=(int)((recordNum*sup2)+1);
//printf("%d",minNum);

cHead=pHead;
for(i=0;i<recordNum;i++)
{
for(j=0;j<colNum;j++)
{
p=cHead;
while(p!=NULL)
{
if(p->itemset[p->tag]==fullSet2[i][j])
{
p->count++;
flag=false;
break;
}
else
{
pTail=p;
p=p->next;
flag=true;
}
}
if(flag==true)
{
p1=(struct tItem*)malloc(sizeof(struct tItem));
p1->tag=0;
p1->itemset[p1->tag]=fullSet2[i][j];
p1->count=1;
pTail->next=p1;
p1->next=NULL;
}
}
}

printf("\n");
printf("--------The local candidate 1_itemsets--------\n");
p=cHead;
while(p!=NULL)
{
count++;
printf(" %c",p->itemset[p->tag]);
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}
printf("\n");
printf("In all, there are %d candidate 1_itemsets.\n",count);

/*pp=cHead;

while(pp!=NULL)
{
if(pp->count>minNum)
{
fHead->count=cHead->count;
fHead->tag=cHead->tag;
fHead->itemset[fHead->tag]=cHead->itemset[cHead->tag];
fHead->next=NULL;
break;
}
pp=pp->next;
}

fp=fHead;
pp=pp->next;

while(pp!=NULL)
{
if(pp->count>minNum)
{
temp=(struct tItem*)malloc(sizeof(struct tItem));
temp->count=pp->count;
temp->next=NULL;
temp->tag=pp->tag;
temp->itemset[temp->tag]=pp->itemset[pp->tag];
fp->next=temp;
fp=temp;
//printf("%c",pp->itemset[pp->tag]);
}
pp=pp->next;
}

printf("\n");
printf("--------The frequence 1_itemsets--------\n");
fp=fHead;
while(fp!=NULL)
{
printf(" %c",fp->itemset[fp->tag]);
printf(" %d",fp->count);
printf(" %d",fp->tag);
printf("\n");
fp=fp->next;
}

return (fHead);*/
return (cHead);
}

struct tItem *Gen_kFrequence_subsets(tItem *f) //Éú³ÉƵ·±kÏÿÏîµÄ×Ó¼¯µÄ¼¯ºÏ
{
tItem *FreItemSubset;
//tItem *p;
int ListLength=f->tag+1;
int i;
//buffer=(int*)malloc(col*sizeof(int*))
char *List,*Buffer;

List=(char*)malloc(ListLength*sizeof(char*));
Buffer=(char*)malloc(ListLength*sizeof(char*));

for(i=0;i<f->tag+1;i++)
{
List[i]=f->itemset[i];
//printf(" %c",List[i]);
}

FreItemSubset=(struct tItem*)malloc(sizeof(struct tItem));
FreItemSubset->next=NULL;
FreItemSubset=SubSet(List,0,Buffer,0,FreItemSubset ,ListLength);

/*p=FreItemSubset;
p=p->next;
while(p!=NULL)
{
for(i=0;i<=p->tag;i++)
{
printf(" %c",p->itemset[i]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}*/

return (FreItemSubset);
}

int Index(char *List, char c, int ListLength)
{
for(int i=0; i<=ListLength-1; i++)
{
if(c==List[i])
{
return i;
break;
}
}
return -1;
}

struct tItem *SubSet(char *List, int m, char *Buffer, int flag, tItem *fis,int ListLength)
{
//fis->next=NULL;
//printf("###\n");
if(m <= ListLength-1)
{
/*if(m==0)
{
Buffer[0]=List[0];
}*/
//Buffer[flag]=List[m];
/*if(flag==0)
{
Buffer[flag]=List[m];
}*/

for(int i=(flag==0) ? 0 : Index(List,Buffer[flag-1],ListLength)+1; i<=ListLength-1; i++)
//µ±flag==0ʱ£¬BufferÖÐûÓÐÈκÎÔªËØ£¬´Ëʱi=[0...ListLength-1]
//µ±flag>0ʱ£¬ÕÒµ½BufferÖеÄ×îºóÒ»¸öÔªËØÔÚ¼¯ºÏListÖÐ µÄλÖÃi£¬°Ñ[i....ListLength-1]
//´¦µÄÔªËØ£¬¼Óµ½BufferÔªËØµÄ×îºóÃæ
{

Buffer[flag]=List[i];
fis=AddToSubset(Buffer,flag,fis);
//Output(Buffer,flag);
SubSet(List, m+1, Buffer,flag+1,fis,ListLength);
}
}

/*tItem *p;
p=fis;
while(p!=NULL)
{
for(int j=0;j<=p->tag;j++)
{
printf(" %c",p->itemset[j]);
}
printf(" %d",p->count);
printf(" %d",p->tag);
printf("\n");
p=p->next;
}*/

return (fis);
}

struct tItem *AddToSubset(char *Buffer, int flag, tItem *fis) //½«×Ó¼¯Ìí¼Óµ½Á´±íÖÐ
{

tItem *p;
int i=0;

p=(struct tItem*)malloc(sizeof(struct tItem));

p->count=0;
p->tag=flag;

while(i<=flag)
{
p->itemset[i]=Buffer[i];
i++;
}

p->next=fis->next;
fis->next=p;

return (fis);
}

void Gen_association_rules(tItem *kf, tItem *p, double minCon) //Éú³É¹ØÁª¹æÔò
{
int i=0;
int j=0;
double m;
bool flag;

//printf("@@@@ %f\n",minCon);

m=(double)(kf->count)/(double)(p->count);

if(m>=minCon)
{
printf("\n");
while(i<=p->tag)
{
if(i!=p->tag)
{
printf("%c ",p->itemset[i]);
}
else
{
printf("%c ",p->itemset[i]);
}
i++;
}

printf("=====> ");

while(j<=kf->tag)
{
if(j!=kf->tag)
{
for(i=0;i<=p->tag;i++)
{
if(kf->itemset[j]==p->itemset[i])
{
flag=false;
break;
}
else
{
flag=true;
}
}
if(flag==true)
{
printf("%c ",kf->itemset[j]);
}

}
else
{
for(i=0;i<=p->tag;i++)
{
if(kf->itemset[j]==p->itemset[i])
{
flag=false;
break;
}
else
{
flag=true;
}
}
if(flag==true)
{
printf("%c ",kf->itemset[j]);
}

}
j++;
}

//cout << setprecision<< m <<endl;
m=(double)(p->count)/(double)(kf->count);
printf(" Confidence : %f",m);

printf("\n");
}
}

create thumbnails problem by mplayer

create thumbnails problem by mplayer

Hi, I have mplayer on my SUSE Linux Enterprise Server 10 (x86_64).I have a problem using a command line that uses mplayer to create thumbnail of video.
This is the command:
./mplayer -ss 00:01:34 -noframedrop -nosound -vo jpeg -frames 1 /home/sxp/heikediguo2.ts
But I got a snapshot with mosaics. So I used another command to solve the mosaic problem.
./mplayer -ss 00:01:34 -demuxer lavf -vf screenshot -vo jpeg -lavdopts skiploopfilter=all:skipframe=nonkey -nosound -frames 2 /home/sxp/heikediguo2.ts
However the first snapshot is gray.
Any ideas? I appreciate any help. Thanks!