コード例 #1
0
int main()
{
	TNode *root = newNode(10);
	root->left = newNode(15);
	root->right = newNode(20);
	root->left->left = newNode(25);
	root->left->left->left = newNode(30);

#ifdef SERIALIZETREE
	TNode *newRoot = NULL;
	FILE *fp = fopen("./serializeTree.txt","w");
	if(NULL == fp)
	{
		printf("fopen error write mode...return");
		return -1;
	}
	serializeTree(root, fp);
	fclose(fp);

	fp = fopen("./serializeTree.txt","r");
	if(NULL == fp)
	{
		printf("fopen error read mode...return");
		return -1;
	}
	deserializeTree(&newRoot, fp);
	fclose(fp);
	
	serializeTree(newRoot, stdout);
#endif
	return 0;
}
コード例 #2
0
ファイル: serializeTree.c プロジェクト: RAJU009F/my-work
void serializeTree(struct Node *root, FILE *fp)
		{
			if(!root)
				{
					fprintf(fp, "%d", -1);
					return;
					
				}
			fprintf(fp, "%d", root->data);
			serializeTree(root->l, fp);
			serializeTree(root->r, fp);
		
		
		}
コード例 #3
0
ファイル: hpdRFtree.cpp プロジェクト: sunsure/DistributedR
int* serializeTree(hpdRFnode *tree, int* buffer)
{
  double* temp = (double*) buffer;
  *(temp++) = tree->prediction;
  *(temp++) = tree->deviance;
  *(temp++) = tree->complexity;

  buffer = (int *) temp;
  *(buffer++) = tree->treeID;
  *(buffer++) = tree->split_variable;
  *(buffer++) = tree->split_criteria_length;

  temp = (double *)buffer;
  for(int i = 0; i < tree->split_criteria_length; i++)
    temp[i] = tree->split_criteria[i];

  temp += tree->split_criteria_length;
  buffer = (int *) temp;

  *buffer = 0;
  *buffer += (tree->additional_info != NULL) << 1;
  *buffer += (tree->left != NULL) << 2;
  *buffer += (tree->right != NULL) << 3;
  buffer++;

  if(tree->additional_info)
    {
      *(buffer++) = tree->additional_info->attempted;
      *(buffer++) = tree->additional_info->completed;
      *(buffer++) = tree->additional_info->leafID;
      *(buffer++) = tree->additional_info->num_obs;
      *(buffer++) = tree->additional_info->depth;
      temp = (double *) buffer;
      for(int i = 0; i < tree->additional_info->num_obs; i++)
	temp[i] = tree->additional_info->weights[i];
      temp += tree->additional_info->num_obs;
      buffer = (int *) temp;
      for(int i = 0; i < tree->additional_info->num_obs; i++)
	buffer[i] = tree->additional_info->indices[i];
      buffer += tree->additional_info->num_obs;
    }
  if(tree->left)
    buffer = serializeTree(tree->left, buffer);
  if(tree->right)
    buffer = serializeTree(tree->right, buffer);
  return buffer;
}
コード例 #4
0
ファイル: Population.cpp プロジェクト: EBirch/geneticBuddha
void Population::migrate(std::vector<std::pair<float, std::shared_ptr<Node>>> &newPop){
	std::uniform_real_distribution<double> migrateDist(0, 1);
	int next = (rank + 1) % processors;
	int prev = (rank - 1 < 0) ? processors - 1 : rank - 1;
	std::vector<std::pair<float, std::shared_ptr<Node>>> tempPop;
	if(rank % 2 == 0){
		for(int i = 0; i < newPop.size() / 10; ++i){
			int index = migrateDist(rng) * newPop.size();
			auto treeString = serializeTree(newPop[index].second);
			int size = treeString.length();
			MPI_Send(&size, 1, MPI_INT, next, 0, MPI_COMM_WORLD);
			MPI_Send(&treeString[0], treeString.length(), MPI_CHAR, next, 0, MPI_COMM_WORLD);
		}
		for(int i = 0; i < newPop.size() / 10; ++i){
			int size = 0;
			MPI_Recv(&size, 1, MPI_INT, prev, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
			std::string temp;
			temp.resize(size);
			MPI_Recv(&temp[0], size, MPI_CHAR, prev, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
			std::stringstream stream(temp);
			tempPop.push_back(std::make_pair(0.0, deserializeTree(stream)));
		}	
	}
	else{
		for(int i = 0; i < newPop.size() / 10; ++i){
			int size = 0;
			MPI_Recv(&size, 1, MPI_INT, prev, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
			std::string temp;
			temp.resize(size);
			MPI_Recv(&temp[0], size, MPI_CHAR, prev, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
			std::stringstream stream(temp);
			tempPop.push_back(std::make_pair(0.0, deserializeTree(stream)));
		}
		for(int i = 0; i < newPop.size() / 10; ++i){
			int index = migrateDist(rng) * newPop.size();
			auto treeString = serializeTree(newPop[index].second);
			int size = treeString.length();
			MPI_Send(&size, 1, MPI_INT, next, 0, MPI_COMM_WORLD);
			MPI_Send(&treeString[0], treeString.length(), MPI_CHAR, next, 0, MPI_COMM_WORLD);
		}	
	}
	for(auto &thing : tempPop){
		newPop.push_back(thing);
	}
}
コード例 #5
0
ファイル: Huffman.cpp プロジェクト: mbradber/HuffmanProject
/*---------------------------------------------------------------------
  Return a list of comma separated values containing the Huffman tree
  in depth first, post order.
  ---------------------------------------------------------------------*/
const std::string Huffman::getSerializedTree()
{
	serializeTree(root);
	std::stringstream builder;
	int counter = 0;

	for(std::list<int>::const_iterator itr = charList.begin(); itr != charList.end(); ++itr)
		builder << *itr << ",";

	return builder.str();
}
コード例 #6
0
ファイル: Huffman.cpp プロジェクト: mbradber/HuffmanProject
/*---------------------------------------------------------------------
  Store the values of the Huffman tree in depth first, post order into a 
  list.
  ---------------------------------------------------------------------*/
void Huffman::serializeTree(ByteData* node)
{
	if(node->getLeftNode() != 0)
		serializeTree(node->getLeftNode());

	if(node->getRightNode() != 0)
		serializeTree(node->getRightNode());

	if(node->getValue().getData() != NIL) ++numSerialized;

	charList.push_back(node->getValue().getData());

	/*Clean up*/
	//if(node->getParentNode() != NULL)
	//{
	//	if(node->getParentNode()->getLeftNode() == node)
	//		node->getParentNode()->setLeftNode(NULL);
	//	else if(node->getParentNode()->getRightNode() == node)
	//		node->getParentNode()->setRightNode(NULL);
	//}

	//delete node;
	//node = NULL;
}
コード例 #7
0
ファイル: Population.cpp プロジェクト: EBirch/geneticBuddha
void Population::doGeneration(std::vector<std::tuple<int, int, int>> &points){
	std::vector<std::pair<float, std::shared_ptr<Node>>> newPop;
	for(auto &func : population){
		score(points, func);
	}
	std::sort(population.begin(), population.end());
	if(population[0].first < best.first){
		best = std::make_pair(population[0].first, serializeTree(population[0].second));
	}
	for(int i = 0; i < population.size() - 1; i += 2){
		crossover(population[i].second, population[i + 1].second);
		mutate(population[i].second);
		mutate(population[i + 1].second);
		newPop.push_back(std::make_pair(0.0, population[i].second));
		newPop.push_back(std::make_pair(0.0, population[i + 1].second));
	}
	migrate(newPop);
	population = newPop;
}
コード例 #8
0
ファイル: serializeTree.c プロジェクト: RAJU009F/my-work
int  main()
		{
			struct Node *root = newNode(1);
			root->l  =  newNode(2);
			root->r  =  newNode(3);
			root->l->l =  newNode(4);
			root->l->r = newNode(5);
			root->r->l=  newNode(6);
			root->r->r = newNode(7);
			
			FILE *fp  = fopen("tree.txt", "w");
			
			serializeTree(root, fp);
			fclose(fp);
			struct Node *root1 = NULL;
			FILE *fp1 = fopen("tree.txt", "r");
			
			deserializeTree(&root1, fp1);
			fclose(fp1);	
			inorder(root1);
			
		
		}