Exemplo n.º 1
0
void Query::run_query(ClientDeal &client)
{
	get_query_map(client);
	/*
	 * 求交集
	 */
	count_common_docid();
	int docid = calculate_similarity(client);
	std::cout<<"docid "<<docid<<std::endl;
}
Exemplo n.º 2
0
void simbet_check_for_relaying_pkgs(struct Simulator *aSim, struct Node *aNode, struct Node *bNode)
{
	struct Item *aItem, *temp;
	struct Pkg *aPkg, *newPkg;
	struct Node *dstNode;
	double sim_aNode_dst, sim_bNode_dst, SimUtil_aNode, SimUtil_bNode, BetUtil_aNode, BetUtil_bNode, SimBetUtil_aNode, SimBetUtil_bNode;

	aItem = aNode->storage->pkgs.head;
	while(aItem != NULL) {
		aPkg = (struct Pkg*)aItem->datap;
		dstNode = lookup_node(&aSim->vnodes, aPkg->dst);
		/* calculate the similarity between aNode and the dest*/
		sim_aNode_dst = calculate_similarity(aNode, dstNode);
		/* calculate the similarity between bNode and the dest*/
		sim_bNode_dst = calculate_similarity(bNode, dstNode);
		if(sim_aNode_dst+sim_bNode_dst == 0) {
			SimUtil_aNode = 0;
			SimUtil_bNode = 0;
		} else {
			SimUtil_aNode = sim_aNode_dst/(sim_aNode_dst+sim_bNode_dst);
			SimUtil_bNode = sim_bNode_dst/(sim_aNode_dst+sim_bNode_dst);
		}

		if(aNode->betweenness+bNode->betweenness == 0) {
			BetUtil_aNode = 0;
			BetUtil_bNode = 0;
		} else {
			BetUtil_aNode = aNode->betweenness/(aNode->betweenness+bNode->betweenness);
			BetUtil_bNode = bNode->betweenness/(aNode->betweenness+bNode->betweenness);
		}
		SimBetUtil_aNode = aSim->oracle->alfar*SimUtil_aNode + aSim->oracle->beta*BetUtil_aNode;
		SimBetUtil_bNode = aSim->oracle->alfar*SimUtil_bNode + aSim->oracle->beta*BetUtil_bNode;

		if(aSim->fwdMethod == NO_REPLICA_FWD) {
			 if(strcmp(aPkg->dst, bNode->name)==0) {
				newPkg = pkg_copy_func(aPkg);
				newPkg->endAt = aSim->clock;
				node_recv(aSim, bNode, newPkg);
				temp = aItem->next;
				storage_remove_pkg(aNode->storage, aPkg->id);
				aItem = temp;
				continue;
			 } else if( SimBetUtil_aNode < SimBetUtil_bNode ) {
				newPkg = pkg_copy_func(aPkg);
				node_recv(aSim, bNode, newPkg);
				temp = aItem->next;
				storage_remove_pkg(aNode->storage, aPkg->id);
				aItem = temp;
				continue;
			 }


		} else if(aSim->fwdMethod == BETTER_ESTIMATE_FWD) {
			 if(strcmp(aPkg->dst, bNode->name)==0) {
				newPkg = pkg_copy_func(aPkg);
				newPkg->endAt = aSim->clock;
				node_recv(aSim, bNode, newPkg);
				temp = aItem->next;
				storage_remove_pkg(aNode->storage, aPkg->id);
				aItem = temp;
				continue;
			 } else if( SimBetUtil_aNode < SimBetUtil_bNode ) {
				newPkg = pkg_copy_func(aPkg);
				node_recv(aSim, bNode, newPkg);
			 }


		} else if(aSim->fwdMethod == EVERBEST_ESTIMATE_FWD) {
			 if(strcmp(aPkg->dst, bNode->name)==0) {
				newPkg = pkg_copy_func(aPkg);
				newPkg->endAt = aSim->clock;
				node_recv(aSim, bNode, newPkg);
				temp = aItem->next;
				storage_remove_pkg(aNode->storage, aPkg->id);
				aItem = temp;
				continue;
			} else  if ((aPkg->value==-1 && SimBetUtil_aNode < SimBetUtil_bNode) 
				||  (aPkg->value!=-1 && SimBetUtil_bNode > aPkg->value)) {
				newPkg = pkg_copy_func(aPkg);
				aPkg->value = SimBetUtil_bNode;
				newPkg->value = SimBetUtil_bNode;
				node_recv(aSim, bNode, newPkg);
			}
		}
		aItem = aItem->next;
	}
}