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

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

?? m-in.cpp

?? 數據隱私保護K-匿名問題的動態多次發布類似m-invarience算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
const int l=3;			//l-diversity
const int limit=2;		//l-diversity

struct element			//病人的數據結構
{
	int num;
	int gid;
	char name[10];
	int age;
	int zip;
	char disease[20];
	bool flag;
	int bnum;
};
element op[50000];		//舊病人數據
element np[50000];		//新病人數據
int onum;				//舊病人個數
int nnum;				//新病人個數
int remain;				//未被分配的病人個數

struct node				//桶中病人的數據結構
{
	char disease[100];
	int people[5000];
	int pnum;
	int cnum;
};
node SA[10];			//用于記錄等價類中的疾病

node distable[100];		//記錄未被分組的疾病和病人情況
int remain_dis;
int dnum;


struct bucket			//桶的數據結構
{
	bool flag;
	node dis[10];
	int dnum;
	int cnum;
}buc[500];
int bnum;				//桶的個數

struct hash_node		//hash表的數據結構
{
	char disease[100];
	int bnumber;
	bool flag;
}hashtable[10000];

struct hashdis_node		//hash表的數據結構
{
	char disease[20];
	int dnumber;
	bool flag;
}hashdis[10000];

typedef struct t_node	//語義樹的定義
{
	char disease[20];
	struct t_node *father;
}t_node,*tree;
tree root;
struct f_node
{
	char disease[20];
	tree T;
	int height;
}dislist[100];
int disnum=17;
int maxheight=3;

int cnum;				//虛擬元素的個數
int fnum=1;

void input(void);		//讀文件函數
void division(void);	//拆分階段
void balancing(void);	//平衡階段
void assignment(void);	//分配階段
void split(void);		//剝離階段

int hash(int num);			//hash的映射函數
int f(int num);			//hash的key計算函數
int searchhash(int key, char disease[]);		//查找hash表
void inserthash(int key, char disease[], int bnumber);		//插入hash表

int hashdisease(char dis[]);			//hash的映射函數
int searchdis(char dis[]);		//查找hash表
void insertdis(char dis[], int dnumber);		//插入hash表

void create_tree(void);
int caculate(char a[], char b[]);

int caculate_digit(int i, int j);	//計算郵編

int filenum=0;

int main()
{
	
	FILE *fptr;
	char tt[20];
	scanf("%s",tt);
	if((fptr=fopen("500.txt",'r'))==NULL)
		int b;
	
	double m[55][2];
	int i=0;
	while(fscanf(fptr,"%lf %lf", &m[i][0],&m[i][1])!=EOF)
		i++;
	double t1=0;
	double t2=0;

	for(i=0;i<50;i++)
	{
		t1+=(500-m[i][0])/500;
		t2+=m[i][1];
	}
	printf("%.1lf, %.1lf",t1/50,t2/50);
	
	
	
	printf("剩余未分配人員 虛擬元素個數\n");
	create_tree();
	while(fnum!=51)
	{
		input();
		if(onum!=0)
			division();
		balancing();
		assignment();
		split();
		int i,j,k=0;
		printf(" %d %d\n",remain,cnum);
		for(i=0;i<bnum;i++)
		{
			for(j=0;j<buc[i].dnum;j++)
			{
				buc[i].dis[j].cnum=0;
				buc[i].dis[j].pnum=0;
			}
			buc[i].flag=false;
			buc[i].cnum=0;
		}
		bnum=0;
		for(i=0;i<10000;i++)
		{
			hashdis[i].flag=false;
			hashtable[i].flag=false;
			remain=0;
		}
		cnum=0;
		onum=0;
		nnum=0;
		dnum=0;
		remain=0;
		remain_dis=0;
		for(i=0;i<100;i++)
		{
			distable[i].pnum=0;
		}
		for(i=0;i<5000;i++)
			np[i].flag=false;
	}
	return 0;
}
void input(void)
{
	FILE *fptr1;
	FILE *fptr2;
	char old[20];
	char newfile[20];
//	printf("源文件名稱\n");
//	scanf("%s",old);
//	printf("新文件名稱\n");
//	scanf("%s",newfile);
	itoa(fnum,old,10);
	strcat(old,"gg.txt");
	itoa(fnum,newfile,10);
	strcat(newfile,".txt");
	
	int i=0;
//	if((fptr1=fopen("old.txt","r"))==NULL)
	if((fptr1=fopen(old,"r"))==NULL)
		printf("源文件打開失敗/n");
	else
	{
		if ((fptr2=fopen(newfile,"r"))==NULL)
			printf("新文件打開失敗/n");
		else
		{
			while(fscanf(fptr1,"%d %s",&op[i].gid, op[i].name)!=EOF)
			{
				if(strcmp(op[i].name,"c")==0)
					fscanf(fptr1,"%s",op[i].disease);
				else
				{
					fscanf(fptr1,"%d %d %s",&op[i].age, &op[i].zip, op[i].disease);
					op[i].num=++i;
				}
			}
			onum=i;
			i=0;
			while(fscanf(fptr2,"%s %d %d %s",np[i].name,&np[i].age, &np[i].zip, np[i].disease)!=EOF)
				np[i].num=++i;
			nnum=i;
			remain=nnum;
		}
	}
	for(i=0;i<10;i++)
		buc[i].flag=false;
	bnum=0;
}

void division(void)
{
	bool flag=false;
	int i,j,k=0,g,key,save=0,bnumber;
	int tap=1;
	
	bnum=0;
	
	
	for(i=0;i<onum+1;i++)
	{
		if(op[i].gid!=tap||i==onum)
		{
			key=f(k);
			bnumber=searchhash(key, SA[k].disease);
			if(bnumber<0)			//建立新桶
			{
				buc[bnum].dnum=0;
				buc[bnum].cnum=0;
				buc[bnum].flag=false;
				for(g=save;g<i;g++)
				{
					for(j=0;j<nnum;j++)
					{
						if(strcmp(op[g].name,np[j].name)==0)
						{	
							flag=true;
							np[j].flag=true;
							break;
						}
					}
					strcpy(buc[bnum].dis[buc[bnum].dnum].disease,op[g].disease);
					buc[bnum].dis[buc[bnum].dnum].cnum=0;
					buc[bnum].dis[buc[bnum].dnum].pnum=0;
					if(flag==true)
					{
						flag=false;
						buc[bnum].flag=true;
						buc[bnum].dis[buc[bnum].dnum].people[buc[bnum].dis[buc[bnum].dnum].pnum++]=j;
						remain--;
					}
					buc[bnum].dnum++;
				}
				inserthash(key, SA[k].disease, bnum);
				bnum++;
			}
			else							//桶可以合并
			{
				for(g=save;g<i;g++)
				{
					for(j=0;j<nnum;j++)
					{
						if(strcmp(op[g].name,np[j].name)==0)
						{	
							flag=true;
							np[j].flag=true;
							break;
						}
					}
					if(flag==true)
					{
						flag=false;
						for(k=0;k<buc[bnumber].dnum;k++)
						{
							if(strcmp(np[j].disease,buc[bnumber].dis[k].disease)==0)
							{
								buc[bnumber].dis[k].people[buc[bnumber].dis[k].pnum++]=j;
								remain--;
								break;
							}
						}
						
					}
				}
			}
			save=i;
			tap++;
			k=0;
			if(i!=onum)
				strcpy(SA[k++].disease,op[i].disease);
		}
		else
			strcpy(SA[k++].disease,op[i].disease);
	}
}
void balancing(void)
{
	int i,j,k,result,max=0,tmp,bnumber;
	bool flag=false;
	for(i=0;i<nnum;i++)						//將新病人沒有分配過的元素按照疾病分類
	{
		if(np[i].flag==false)
		{
			result=searchdis(np[i].disease);
			if(result<0)
			{
				strcpy(distable[dnum].disease,np[i].disease);
				distable[dnum].people[distable[dnum].pnum++]=i;
				insertdis(np[i].disease,dnum);
				remain_dis++;
				dnum++;
			}
			else
				distable[result].people[distable[result].pnum++]=i;
		}
	}
	
	
	for(i=0;i<bnum;i++)
		if (buc[i].flag==true)
		{
			max=0;
			for(j=0;j<buc[i].dnum;j++)
				if(buc[i].dis[j].pnum>max)
					max=buc[i].dis[j].pnum;					//求出分離階段后桶中疾病人數最多的個數
			for(j=0;j<buc[i].dnum;j++)
			{
				if(buc[i].dis[j].pnum<max)
				{
					
					bnumber=searchdis(buc[i].dis[j].disease);
					if (bnumber<0)
						for(k=buc[i].dis[j].pnum;k<max;k++)
						{
							buc[i].dis[j].people[buc[i].dis[j].pnum++]=-1;
							cnum++;
							buc[i].dis[j].cnum++;
							buc[i].cnum++;
						}
					else
					{
						if(distable[bnumber].pnum>=(max-buc[i].dis[j].pnum))
						{
							for(k=buc[i].dis[j].pnum;k<max;k++)
							{	
								np[distable[bnumber].people[distable[bnumber].pnum]].flag=true;
								buc[i].dis[j].people[buc[i].dis[j].pnum++]=distable[bnumber].people[distable[bnumber].pnum-1];
								distable[bnumber].pnum--;
								remain--;
							}
							if(distable[bnumber].pnum==0)
								remain_dis--;
						}
						else
						{
							tmp=distable[bnumber].pnum;
							for(k=buc[i].dis[j].pnum;k<tmp;k++)
							{	
								np[distable[bnumber].people[distable[bnumber].pnum]].flag=true;
								buc[i].dis[j].people[buc[i].dis[j].pnum++]=distable[bnumber].people[distable[bnumber].pnum-1];
								distable[bnumber].pnum--;
								remain--;
							}
							remain_dis--;
							for(k=buc[i].dis[j].pnum;k<max;k++)
							{
								buc[i].dis[j].people[buc[i].dis[j].pnum++]=-1;
								cnum++;
								buc[i].dis[j].cnum++;
								buc[i].cnum++;
							}
						}
					}
				}
			}
			
		}
}

void assignment(void)
{
	int i,j,k,i1,i2,i3,i4,i5;
	struct order_node
	{
		int dnumber;
		int pnum;
	}order[20];
	int choose[10];
	int onum,min,bnumber;
	int tmp1,tmp2,tmp3;
	bool flag=false,flag2=false,flag3=false;
	
	/*for(i=0;i<bnum;i++)							//向已有桶內分配元素(優化)
	{
		int min=100000;
		for(j=0;j<buc[i].dnum;j++)
		{
			flag=false;
			bnumber=searchdis(buc[i].dis[j].disease);
			if(bnumber<0)
				flag=true;
			if(distable[bnumber].pnum==0)
				flag=true;
			if(flag==true)
				break;
			if(min>distable[bnumber].pnum)
				min=distable[bnumber].pnum;
		}
		if(flag==false)
			for(j=0;j<buc[i].dnum;j++)
			{
				bnumber=searchdis(buc[i].dis[j].disease);
				for(k=0;k<min;k++)
				{
					np[distable[bnumber].people[distable[bnumber].pnum]].flag=true;
					buc[i].dis[j].people[buc[i].dis[j].pnum++]=distable[bnumber].people[distable[bnumber].pnum--];
					remain--;
				}
				if(distable[bnumber].pnum==0)
					remain_dis--;
			}
		
	}*/
	
	flag=true;
	while(remain!=0)
	{
		if(flag==false||remain_dis<l)						//如果剩下的元素實在不能配分,退出
			break;
		
		else
		{
			flag=false;
			onum=0;
			for(i=0;i<dnum;i++)				//按剩余元素個數進行排列
			{
				if(distable[i].pnum!=0)
				{
					order[onum].dnumber=i;
					order[onum++].pnum=distable[i].pnum;
				}
			}
			for(i=1;i<onum;i++)
				for(j=onum-1;j>=i;j--)
					if(order[j-1].pnum<=order[j].pnum)
					{
						order[onum]=order[j-1];
						order[j-1]=order[j];
						order[j]=order[onum];
					}
		////////////////////////////////////	
			if(remain_dis<2*l)
				flag2=true;

			if(l==2)
			{
				for(i=0;i<onum;i++)
				{
					tmp1=1;							//找出l種滿足條件的疾病
					choose[0]=order[i].dnumber;
					for(j=i+1;j<onum;j++)
					{
						if(caculate(distable[order[i].dnumber].disease,distable[order[j].dnumber].disease)>limit)
						{
							choose[tmp1++]=order[j].dnumber;
							flag=true;
							break;
						}
					}
					if(flag==true)
						break;
				}
				if((flag2==true)&&(flag==true))
				{
					for(k=0;k<remain_dis;k++)
						choose[k]=order[k].dnumber;
					tmp1=k;
				}
			}
			else if (l==3)
			{
				for(i1=0;i1<onum-2;i1++)
				{
					choose[0]=order[i1].dnumber;
					for(i2=i1+1;i2<onum-1;i2++)
					{
						tmp1=1;
						if(caculate(distable[order[i1].dnumber].disease,distable[order[i2].dnumber].disease)>limit)
						{	
							choose[tmp1++]=order[i2].dnumber;
							for(i3=i2+1;i3<onum;i3++)
							{
								tmp1=2;
								if((caculate(distable[order[i1].dnumber].disease,distable[order[i3].dnumber].disease)>limit)&&(caculate(distable[order[i2].dnumber].disease,distable[order[i3].dnumber].disease)>limit))
								{
									choose[tmp1++]=order[i3].dnumber;
									flag=true;
									break;
								}
							}
						}
						if(flag==true)
							break;
					}
					if(flag==true)
						break;
				}
				if((flag2==true)&&(flag==true))
				{
					for(k=0;k<remain_dis;k++)
						choose[k]=order[k].dnumber;
					tmp1=k;
				}
			}
			else if (l==5)
			{
				for(i1=0;i1<onum-4;i1++)
				{
					choose[0]=order[i1].dnumber;
					for(i2=i1+1;i2<onum-3;i2++)
					{
						tmp1=1;
						if(caculate(distable[order[i1].dnumber].disease,distable[order[i2].dnumber].disease)>limit)
						{	
							choose[tmp1++]=order[i2].dnumber;
							for(i3=i2+1;i3<onum-2;i3++)
							{
								tmp1=2;
								flag3=true;
								for(i=0;i<tmp1;i++)
									if(caculate(distable[choose[i]].disease,distable[order[i3].dnumber].disease)<=limit)
										flag3=false;
								if(flag3==true)
								{
									choose[tmp1++]=order[i3].dnumber;
									for(i4=i3+1;i4<onum-1;i4++)
									{
										tmp1=3;
										flag3=true;
										for(i=0;i<tmp1;i++)
											if(caculate(distable[choose[i]].disease,distable[order[i4].dnumber].disease)<=limit)
												flag3=false;
										if(flag3==true)
										{
											choose[tmp1++]=order[i4].dnumber;
											for(i5=i4+1;i5<onum;i5++)
											{
												tmp1=4;
												flag3=true;
												for(i=0;i<tmp1;i++)
													if(caculate(distable[choose[i]].disease,distable[order[i5].dnumber].disease)<=limit)
														flag3=false;
												if(flag3==true)
												{
													choose[tmp1++]=order[i5].dnumber;
													flag=true;
													break;
												}
											}
										}
										if(flag==true)
											break;
									}
								}
								if(flag==true)
									break;
							}
						}
						if(flag==true)
							break;
					}
					if(flag==true)
						break;
				}
				if((flag2==true)&&(flag==true))
				{
					int count=0;
					for(k=0;k<remain_dis;k++)
						choose[k]=order[k].dnumber;
					tmp1=k;
				}
			}
			
			
//////////////////////////////////
			int ll=tmp1;
			if(flag==true)						//找到了滿足要求的l種疾病
			{
				for(i=0;i<ll;i++)
					strcpy(SA[i].disease,distable[choose[i]].disease);
				tmp2=f(tmp1);
				tmp3=searchhash(tmp2, SA[tmp1].disease);
				if(tmp3<0)						//沒有當前桶,需要建立新桶
				{
					buc[bnum].flag=true;
					buc[bnum].dnum=0;
					buc[bnum].cnum=0;
					for(i=0;i<ll;i++)
					{
						strcpy(buc[bnum].dis[buc[bnum].dnum].disease,distable[choose[i]].disease);
						buc[bnum].dis[buc[bnum].dnum].cnum=0;
						buc[bnum].dis[buc[bnum].dnum].pnum=0;
						buc[bnum].dnum++;
					}
					inserthash(tmp2,SA[tmp1].disease, bnum);
					tmp3=bnum;
					bnum++;
				}
				tmp1=(distable[choose[ll-1]].pnum+1)/2;
				for(i=0;i<ll;i++)						//向桶里添加元素
				{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av高清在线| 成人黄色小视频在线观看| 欧美视频中文一区二区三区在线观看| 国产欧美视频一区二区三区| 国产综合色在线| 精品国产91九色蝌蚪| 激情图片小说一区| 日韩一区国产二区欧美三区| 日韩精品高清不卡| 这里只有精品免费| 美洲天堂一区二卡三卡四卡视频| 欧美日韩一区二区三区不卡| 亚洲国产一区在线观看| 欧美亚洲动漫另类| 亚洲午夜av在线| 欧美日韩成人激情| 奇米888四色在线精品| 欧美一区二区三区人| 蜜臀av亚洲一区中文字幕| 欧美一级生活片| 蜜臀av一区二区在线观看| 精品日韩av一区二区| 国内精品伊人久久久久av影院 | 欧美日本国产视频| 亚洲18色成人| 51精品国自产在线| 免费观看91视频大全| 日韩一区二区三区电影在线观看| 免费在线视频一区| 亚洲精品在线电影| 国产99精品视频| 亚洲视频 欧洲视频| 日本电影亚洲天堂一区| 亚洲国产成人va在线观看天堂| 制服丝袜日韩国产| 久久99久久久久| 国产午夜亚洲精品午夜鲁丝片| 成人蜜臀av电影| 亚洲欧美国产毛片在线| 欧美日韩三级视频| 美国av一区二区| 欧美国产日韩亚洲一区| 色琪琪一区二区三区亚洲区| 亚洲国产精品一区二区久久 | 一区二区在线免费| 欧美精品日韩精品| 国产一区二区三区视频在线播放| 日本一区二区三区高清不卡| 91美女在线看| 视频一区二区三区入口| 久久综合九色综合97婷婷女人| 成人动漫av在线| 亚洲成人av一区二区三区| 久久综合一区二区| 91女厕偷拍女厕偷拍高清| 日本欧美肥老太交大片| 国产午夜一区二区三区| 欧美性三三影院| 国产综合久久久久久鬼色| 亚洲欧美另类久久久精品2019| 色婷婷av一区二区三区软件 | 成人开心网精品视频| 亚洲综合视频在线| 精品国产91洋老外米糕| 91国在线观看| 国产一区二区三区不卡在线观看 | 精品免费99久久| 94色蜜桃网一区二区三区| 日本在线播放一区二区三区| 日本一区二区三区四区在线视频 | 欧美男生操女生| 成人福利视频网站| 日韩精品1区2区3区| 国产精品另类一区| 91精品国产一区二区三区蜜臀 | 91成人看片片| 国产美女av一区二区三区| 亚洲成人精品一区| 国产精品久久久久久久午夜片| 91精品黄色片免费大全| 97久久超碰国产精品| 精品系列免费在线观看| 一级特黄大欧美久久久| 国产嫩草影院久久久久| 欧美一级高清片| 91尤物视频在线观看| 久久精品国产精品亚洲综合| 一色屋精品亚洲香蕉网站| 欧美大肚乱孕交hd孕妇| 国产福利一区二区三区视频| 香蕉加勒比综合久久| 综合久久久久综合| 日韩免费性生活视频播放| 在线观看日产精品| 国产成人精品一区二区三区四区 | 日韩欧美资源站| 在线精品视频一区二区三四| 久久97超碰色| 青娱乐精品在线视频| 日韩午夜在线影院| 秋霞成人午夜伦在线观看| 欧美一级艳片视频免费观看| 美女免费视频一区二区| 久久久久免费观看| 制服.丝袜.亚洲.中文.综合| 成人av午夜电影| 国产综合色精品一区二区三区| 国产精品久久久99| 国产亚洲欧美日韩俺去了| 欧美午夜一区二区| av在线这里只有精品| 国产精品一卡二| 亚洲一区二区三区四区的| 日本一二三不卡| 精品国产91乱码一区二区三区| 91麻豆视频网站| 国产99久久久精品| 天使萌一区二区三区免费观看| 欧美国产精品一区二区三区| 成人永久看片免费视频天堂| 在线观看av不卡| 亚洲精品国产精品乱码不99| 在线亚洲人成电影网站色www| 夜夜嗨av一区二区三区中文字幕| 国产精品资源站在线| 久久电影网电视剧免费观看| 久久久久久9999| 亚洲成人av在线电影| 一区二区三区在线免费播放| 欧美日韩视频在线第一区 | 国产精品一区二区在线播放| 在线看国产一区| 欧美日韩免费一区二区三区视频| 国产一区二区三区黄视频| 亚洲成a人在线观看| 午夜成人免费视频| 欧美久久一二区| 欧美日韩一区二区三区视频| 国产一区久久久| 成人国产精品免费| 亚洲第一二三四区| 亚洲综合另类小说| 国产一区二区三区av电影 | 一区二区三区在线播| 亚洲欧美日韩国产一区二区三区| 亚洲视频一二三| 欧美日韩在线免费视频| 欧美成人性福生活免费看| 久久免费午夜影院| 国产三级一区二区| 在线视频一区二区免费| 欧美视频中文一区二区三区在线观看| 在线观看91精品国产麻豆| 在线亚洲人成电影网站色www| 日韩一区二区在线观看| 日韩一区二区影院| 国产人久久人人人人爽| 欧美蜜桃一区二区三区| 午夜精品久久久久久久久久久| 中文字幕永久在线不卡| 色综合婷婷久久| av一二三不卡影片| 国产成人一区在线| 日韩电影一二三区| 欧美日韩国产免费一区二区| 国产在线精品一区二区不卡了| 国产精品久久久久久久久久免费看| 在线电影欧美成精品| 激情久久五月天| 韩国v欧美v亚洲v日本v| 欧美日韩高清在线播放| 亚洲电影激情视频网站| 欧美mv和日韩mv的网站| 最新不卡av在线| 日韩免费看的电影| 亚洲国产成人91porn| 日韩国产成人精品| 国产精品国产自产拍高清av| 丁香婷婷综合激情五月色| 日韩欧美一级在线播放| 欧美性做爰猛烈叫床潮| 亚洲一区二区欧美| 亚洲欧美日韩在线不卡| 日本不卡123| 一区二区欧美国产| 在线视频你懂得一区| heyzo一本久久综合| 国产精品综合视频| 国产精品嫩草99a| 亚洲最大色网站| 亚洲女女做受ⅹxx高潮| 国产精品久久久久久久午夜片| 亚洲一区二区精品3399| 日本欧美一区二区| 亚洲国产欧美一区二区三区丁香婷| 国产精品毛片无遮挡高清| 欧美四级电影网| 成人激情电影免费在线观看| 国产精品18久久久久| 色94色欧美sute亚洲线路二|