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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cluster.cpp

?? K-means clustering using Berkeley DB
?? CPP
字號:
// cluster.cpp : 定義控制臺應(yīng)用程序的入口點(diǎn)。
//

#include "stdafx.h"
#include <db.h>

DB_ENV * DBEnv;				//Berkeley DB環(huán)境變量指針
u_int32_t env_flags;		//DBEnv open flags

DB * pdb_ptr;				//pdb_ptr : Primary DB
DB * idb_ptr;				//tdb_ptr : Secondary DB (Index: image_id)

DBC * pcur;					//Primary DB Cursor
DBC * icur;					//Secondary DB (Index: time_stamp) Cursor

typedef struct NearestRecord
{
	int cluster_id;
	float distance;
	int vector[128];
} NRecord;
// Berkeley DB中Primary Database存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)
typedef struct TypeDBRecordStruct
{
	unsigned int image_id;
	unsigned int cluster_id;
	unsigned char vector[128];
} DBRecord;
// Berkeley DB Primary-Secondary Mapping Callback Functions
int get_record_by_image_id(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey);

using namespace std;

void Process();
void GetCenter(int center[500][128],int stop[500],double sse[500]);
void ImproveCenter(double sse[500], int center[500][128],int stop[500]);
inline float Distance(int vector1[],int vector2[],int dimen);
inline float SDistance(int vector1[],int vector2[],int dimen);
inline NRecord Nearest(int center[500][128],int vector[],int dimen);
void ClusterInit();
int init();

int _tmain(int argc, _TCHAR* argv[])
{

	//ClusterInit();
	init();
	Process();

	return 0;
}

void Process()
{
	

	int iterate,i,j,k,center[500][128],count[500],stop[500],vector[128],dimen=128;
	int iid,cid;
	NRecord *cluster_farest_point;
	cluster_farest_point=new NRecord[500];
	NRecord nearest_cluster;
	double sum[500][128],sse[2][500];

	//////////////////////////////////
	DBT key, data;
	int ret;
	
	memset(&key, 0, sizeof(DBT));
    memset(&data, 0, sizeof(DBT));
    key.size = sizeof(int);
    data.size = sizeof(DBRecord);
	
	DBRecord rec;
	//////////////////////////////////

	fstream log;
	int rec_no = 0;//////////////////////
	key.data = &rec_no;/////////////////

	for(iterate=0;iterate<10;iterate++)
	{

		log.open("iterate_log.txt",ios_base::out|ios_base::app);
		//\***********\///PART2//////////////////////////////////////////start iterate
		cout<<"start iterate "<<iterate<<"..."<<endl;
		log<<"---------iterate "<<iterate<<"---------"<<endl;

		GetCenter(center,stop,sse[0]);////////Get center
		//for(i=0;i<500;i++)cout<<sse[0][i]<<" ";
		//cout<<endl;
		//for(i=0;i<500;i++)cout<<stop[i]<<" ";
		//for(j=0;j<128;j++)cout<<center[0][j]<<" ";
		//cout<<endl;

		for(i=0;i<500;i++)
		{
			cluster_farest_point[i].cluster_id=i;
			cluster_farest_point[i].distance=0;
		}
		for(i=0;i<500;i++)sse[1][i]=0;
		for(i=0;i<500;i++)
		{
			count[i]=0;
			for(j=0;j<128;j++)sum[i][j]=0;
		}

		int t=0;
		//char x;
		
		ret = pcur->get(pcur, &key, &data, DB_FIRST);//////////////////////////////////
		int mark=0;
		do
		{  
			iid = ((DBRecord *)data.data)->image_id;
			for(i=0;i<128;i++)vector[i]=((DBRecord *)data.data)->vector[i];
			//cin>>x;///////////
			nearest_cluster=Nearest(center,vector,dimen);
			//cout<<"nearest_cluster "<<nearest_cluster<<endl;
			((DBRecord *)data.data)->cluster_id=nearest_cluster.cluster_id;
			pcur->put(pcur, &key, &data, DB_CURRENT);
			k=nearest_cluster.cluster_id;
			for(i=0;i<128;i++)sum[k][i]+=vector[i];//////////////////sum for center
			if(cluster_farest_point[k].distance<nearest_cluster.distance)//store the farest point
			{
				cluster_farest_point[k].distance=nearest_cluster.distance;
				for(i=0;i<128;i++)cluster_farest_point[k].vector[i]=nearest_cluster.vector[i];
			}
			count[k]++;
			sse[1][k]+=SDistance(center[k],vector,dimen);//////////////////SSE here
			ret = pcur->get(pcur, &key, &data, DB_NEXT);
			t++;
			if(t % 1000 == 0)cout<<t-1000<<"--"<<t<<endl;

		}while(ret==0);
		

		////////////////////////////////////////////////////////////////////////////////
		fstream radius("cluster_radius.txt",ios_base::out);///////////////////////////output the farnest point of each cluster
		radius<<"Cluster"<<'\t'<<"Max_Radius"<<'\t'<<"Position of the farnest point"<<endl;
		for(i=0;i<500;i++)
		{
			radius<<cluster_farest_point[i].cluster_id<<'\t'<<cluster_farest_point[i].distance<<'\t'<<'\t';
			for(j=0;j<128;j++)
			{ 
				if(cluster_farest_point[i].distance!=0)radius<<cluster_farest_point[i].vector[j]<<" ";
			}
			radius<<endl;
		}
		radius.close();
		///\***********\///PART3//////////////////////////////////////////check state
		for(i=0;i<500;i++)
		{	
			///////////////////////////////////////////////////////////converge threshold
			if(abs(sse[0][i]-sse[1][i])<1000)stop[i]=4;
			else if(abs(sse[0][i]-sse[1][i])<10000)stop[i]=3;
			else if(abs(sse[0][i]-sse[1][i])<100000)stop[i]=2;
			else if(abs(sse[0][i]-sse[1][i])<1000000)stop[i]=1;
			else stop[i]=0;
		}

		/////////////////////////////////////See if there are any empty clusters
		cout<<"empty cluster check..."<<endl;
		int max;
		double temp;
		for(i=0;i<500;i++)
		{
			if(count[i]==0 || cluster_farest_point[i].distance==0)////////
			{
				
				cout<<"find empty cluster "<<i<<"   "<<'\t';
				log<<"find empty cluster "<<i<<"   "<<'\t';
			
				temp=0;//////////////////find max sse
				for(j=0;j<500;j++)
				{
					if(cluster_farest_point[j].cluster_id>=0 && sse[1][j]>temp)
					{
						temp=sse[1][j];
						max=j;
					}
				}
				cout<<"target cluster "<<max<<endl;
				log<<"target cluster "<<max<<endl;

				for(j=0;j<128;j++)center[i][j]=cluster_farest_point[max].vector[j];
				cluster_farest_point[max].cluster_id=-1;
				sse[1][i]=sse[1][max]=ceil(sse[1][max]/2);
				stop[i]=stop[max]=0;
				
			}
		}

		for(i=0;i<500;i++){log<<"sse of cluster "<<i<<'\t'<<sse[1][i]<<endl;}
		cout<<"empty cluste check end"<<endl;
		/////////////////////////////////////////////////////check end

		
		///\***********\///PART3//////////////////////////////////////////improve center
		cout<<"start improve center and state..."<<endl;
		for(i=0;i<500;i++)
		{
			for(j=0;j<128;j++)
			{
				if(count[i])center[i][j]=int(sum[i][j]/count[i]);
			}
		}
		ImproveCenter(sse[1],center,stop);

		/////////////////////////////////////////////////ALL End
		cout<<"---------iterate end---------"<<endl;
		log<<"---------iterate end---------"<<endl;
		log.close();

	}
	pcur->close(pcur);
	icur->close(icur);
	idb_ptr->close(idb_ptr, 0);
	pdb_ptr->close(pdb_ptr, 0);

	delete cluster_farest_point;

}

void GetCenter(int center[500][128],int stop[500],double sse[500])
{
	fstream fileopen("cluster.txt",ios_base::in);
	int i,j,n;
	for(i=0;i<500;i++)
	{
		fileopen>>n;
		fileopen>>sse[n]>>stop[n];
		for(j=0;j<128;j++)fileopen>>center[n][j];
	}

}
void ImproveCenter(double sse[500],int center[500][128],int stop[500])
{
	fstream fileopen("cluster.txt",ios_base::out);
	int i,j;
	for(i=0;i<500;i++)
	{
		fileopen<<i<<'\t'<<sse[i]<<'\t'<<stop[i]<<'\t';
		for(j=0;j<128;j++)fileopen<<center[i][j]<<" ";
		fileopen<<endl;
	}
}

float Distance(int vector1[],int vector2[],int dimen)
{
	int i;
	float t;
	double j=0;
	for(i=0;i<dimen;i++)
	{
		t=float(vector1[i]-vector2[i]);
		j+=pow(t, 2);
	}
	return (float)sqrt(j);
}
float SDistance(int vector1[],int vector2[],int dimen)
{
	int i;
	float t,j=0;
	for(i=0;i<dimen;i++)
	{
		t=float(vector1[i]-vector2[i]);
		j+=(float)pow(t, 2);
	}
	return j;
}
NRecord Nearest(int center[500][128],int vector[],int dimen)
{
	NRecord nr;
	int i,n;
	float k,min=9999999;
	for(i=0;i<500;i++)
	{
		k=Distance(center[i],vector,dimen);
		if(k<min){min=k;n=i;}
	}
	nr.cluster_id=n;
	nr.distance=min;
	for(i=0;i<128;i++)nr.vector[i]=vector[i];
	return nr;
}

void ClusterInit()
{
	//PART1//////////////////////////////////////////////////////////////////get center from txt and put it in cluster file, initial cluster
	fstream fileopen;
	char *path1="center.txt";
	char *path2="cluster.txt";
	int i,j,zero=0,center[500][128];

	fileopen.open(path1,ios_base::in);
	if(fileopen.fail())
	{
		cout<<"cannot open "<<path1<<endl;
		fileopen.clear();
	}
	for(i=0;i<500;i++)
	{
		for(j=0;j<128;j++)fileopen>>center[i][j];
	}
	fileopen.close();

	fileopen.open(path2,ios_base::out);
	if(fileopen.fail())
	{
		cout<<"cannot open "<<path2<<endl;
		fileopen.clear();
	}
	for(i=0;i<500;i++)
	{
		fileopen<<i<<'\t'<<zero<<'\t'<<zero<<'\t';
		for(j=0;j<128;j++)fileopen<<center[i][j]<<" ";
		fileopen<<endl;
	}
	///////////////////////////////////////////////////////////////////////
}
int init()
{
		/* 初始化DB */
	/* Create an environment object and initialize it for error reporting */
	int ret = db_env_create(&DBEnv, 0);
	if(ret != 0)
	{
		fprintf(stderr, "Error creating env handle: %s\n", db_strerror(ret));
		return -1;
	}
	/* Open the environment */
	env_flags = DB_CREATE | DB_INIT_MPOOL;
	ret = DBEnv->open(DBEnv, "f:\\BDB_data", env_flags, 0); /* File mode (default) */
	if (ret != 0)
	{
		fprintf(stderr, "Environment open failed: %s", db_strerror(ret));
		return -1;
	}

	/* 創(chuàng)建數(shù)據(jù)庫 */
	db_create(&pdb_ptr, DBEnv, 0);
	db_create(&idb_ptr, DBEnv, 0);
	
	pdb_ptr->set_re_len(pdb_ptr, sizeof(DBRecord));
	idb_ptr->set_flags(idb_ptr, DB_DUP);

	pdb_ptr->open(pdb_ptr, NULL, "PrimaryDB.db", NULL, DB_QUEUE, DB_CREATE, 0);	//QUEUE TYPE
	idb_ptr->open(idb_ptr, NULL, "image_id.db", NULL, DB_BTREE, DB_CREATE, 0);	//BTREE TYPE
	
	/* 設(shè)置Primary DB 與 Secondary DB 的關(guān)聯(lián) */
	pdb_ptr->associate(pdb_ptr, NULL, idb_ptr, get_record_by_image_id, 0);

	/* 打開游標(biāo) */
	pdb_ptr->cursor(pdb_ptr, NULL, &pcur, 0);
	idb_ptr->cursor(idb_ptr, NULL, &icur, 0);
	return 0;
}
int get_record_by_image_id(DB *sdbp, const DBT *pkey, const DBT *pdata, DBT *skey)
{
	DBRecord * record;
    record = (DBRecord *)(pdata->data);
    memset(skey, 0, sizeof(DBT));
	skey->data = &(record->image_id);
    skey->size = 4;
    return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品免费在线观看| 制服视频三区第一页精品| 777精品伊人久久久久大香线蕉| 国产午夜精品一区二区 | av一二三不卡影片| 日韩一区二区三区精品视频 | 国产精品欧美久久久久一区二区| 婷婷亚洲久悠悠色悠在线播放| 色综合天天综合在线视频| 亚洲第一电影网| 在线亚洲一区观看| 午夜欧美电影在线观看| 欧美色窝79yyyycom| 午夜av一区二区三区| 91亚洲永久精品| 欧美大黄免费观看| 国产乱人伦偷精品视频免下载| 日韩欧美精品在线视频| 美女视频网站久久| 精品国产乱码久久久久久蜜臀| 蜜桃精品视频在线观看| 国产日韩在线不卡| 色综合久久久网| 日本系列欧美系列| 精品国产人成亚洲区| 成人动漫中文字幕| 一区二区欧美在线观看| 精品一区二区三区在线播放 | 欧美成人精品二区三区99精品| 免费观看一级欧美片| 国产精品丝袜黑色高跟| 欧美在线视频全部完| 麻豆国产精品一区二区三区| 久久你懂得1024| 欧美性色欧美a在线播放| 久久99精品国产麻豆不卡| 亚洲欧美日韩成人高清在线一区| 欧美精品第1页| 91伊人久久大香线蕉| 国产一区二区三区综合| 一区二区三区国产精品| 国产欧美一二三区| 8x福利精品第一导航| 蜜桃av噜噜一区| 亚洲成人免费看| 夜夜嗨av一区二区三区网页 | 2022国产精品视频| 色成人在线视频| 99久久精品费精品国产一区二区| 美女视频一区二区三区| 日本va欧美va瓶| 亚洲第一在线综合网站| 亚洲欧美日韩系列| 国产精品久久久久天堂| 久久久91精品国产一区二区三区| 日韩欧美专区在线| 日韩一区二区三区在线| 欧美精品色综合| 欧美一区二区性放荡片| 欧美日韩一级视频| 这里只有精品免费| 欧美伦理电影网| 欧美videos中文字幕| 欧美成人精品二区三区99精品| 精品精品国产高清a毛片牛牛| 欧美成人一区二区| 日本一二三四高清不卡| 18欧美亚洲精品| 日韩经典中文字幕一区| 国产成人夜色高潮福利影视| 粗大黑人巨茎大战欧美成人| 不卡视频在线观看| 国产不卡一区视频| 国产91丝袜在线观看| 91免费视频网| 欧美一区二区人人喊爽| 国产欧美日韩精品一区| 一区二区三区小说| 国内精品久久久久影院薰衣草| 国产91精品免费| 777久久久精品| 日韩色视频在线观看| 欧美一区二区三区爱爱| 久久蜜臀中文字幕| 亚洲高清一区二区三区| 成人午夜短视频| 精品久久99ma| 日韩av一级片| 色中色一区二区| 中文字幕的久久| 国产在线视频精品一区| 欧美日韩高清不卡| 最新国产成人在线观看| 国产一区二区视频在线| 精品视频在线免费| 亚洲r级在线视频| 91麻豆123| 一区二区激情视频| 色噜噜狠狠色综合欧洲selulu| 国产亚洲成av人在线观看导航| 日产精品久久久久久久性色| 欧美在线观看视频一区二区三区| 国产精品国产三级国产普通话蜜臀 | 日韩视频在线你懂得| 午夜不卡av免费| 日韩一级高清毛片| 久色婷婷小香蕉久久| 91精品国产乱| 黄网站免费久久| 久久精品网站免费观看| 丁香激情综合国产| 综合激情网...| 91视频在线观看| 无吗不卡中文字幕| 精品久久五月天| 东方aⅴ免费观看久久av| 亚洲色图制服诱惑| 国产做a爰片久久毛片| 91精品国产综合久久久久久| 五月天网站亚洲| 国产欧美一区二区精品性| 国产xxx精品视频大全| 亚洲精品久久久久久国产精华液| 日本久久电影网| 麻豆成人久久精品二区三区红| 欧美刺激午夜性久久久久久久 | 国产精品超碰97尤物18| 欧美日韩一二区| 激情国产一区二区| 亚洲激情中文1区| 欧美成人乱码一区二区三区| 99久久er热在这里只有精品66| 亚洲gay无套男同| 亚洲日本在线视频观看| 久久综合av免费| 日韩欧美高清一区| 色噜噜狠狠成人中文综合| 国产成人一区在线| 男女性色大片免费观看一区二区 | 久久久久综合网| 91麻豆精品国产综合久久久久久 | 水野朝阳av一区二区三区| 国产精品久久久一本精品| 欧美一区二区在线免费播放| 91美女片黄在线观看91美女| 国产精品一级二级三级| 国产一区二区在线电影| 麻豆精品一二三| 蜜臀av一区二区三区| 亚洲一区二区偷拍精品| 亚洲日本青草视频在线怡红院| 欧美成人性福生活免费看| 91精选在线观看| 欧美男男青年gay1069videost| 日本电影欧美片| 欧美性大战久久久久久久蜜臀| www.爱久久.com| 狠狠色丁香久久婷婷综合丁香| 亚洲国产婷婷综合在线精品| 亚洲人亚洲人成电影网站色| 欧美激情一区二区三区四区| 久久婷婷国产综合国色天香 | 老司机精品视频导航| 蜜臀va亚洲va欧美va天堂| 国产在线播放一区三区四| 国产一区二区三区免费看| 成人激情校园春色| 91小视频免费观看| 欧美亚洲国产一卡| 精品成a人在线观看| 亚洲欧洲日本在线| 水野朝阳av一区二区三区| 激情综合网天天干| jlzzjlzz亚洲女人18| 9191成人精品久久| 一色屋精品亚洲香蕉网站| 日韩av中文字幕一区二区| 日韩中文字幕不卡| 国产91丝袜在线18| 欧美精品久久一区| 亚洲丝袜自拍清纯另类| 另类人妖一区二区av| 欧洲中文字幕精品| 久久久久久久久一| 日精品一区二区三区| 99视频国产精品| 久久久国产午夜精品 | 国产亚洲美州欧州综合国| 亚洲成人动漫在线观看| 99re6这里只有精品视频在线观看| 欧美精品亚洲二区| 亚洲第四色夜色| 欧美日韩激情一区二区三区| 国产精品传媒入口麻豆| 国产麻豆精品视频| 精品国产污污免费网站入口| 日韩高清不卡在线| 日韩亚洲欧美在线| 美国毛片一区二区| 精品国产免费一区二区三区四区|