コード例 #1
0
void print_semester_topological(std::istream & input, std::ostream& out) {
	auto catalog = read_modules(input);
	update_earliest_semester(catalog);
	auto modules = values(catalog);
	std::sort(std::begin(modules), std::end(modules), [](module_ptr lhs, module_ptr rhs) {
		return lhs->get_earliest_semester() < rhs->get_earliest_semester();
	});

	auto last_semester = (*std::rbegin(modules))->get_earliest_semester();
	for (auto semester = 1u; semester <= last_semester; semester++) {
		auto range = std::equal_range(std::begin(modules), std::end(modules), semester, semester_comparator{});
		out << semester << ": ";
		std::copy(range.first, range.second, std::ostream_iterator<module_ptr>{out, " "});
		out << "\n";
	}
}
コード例 #2
0
ファイル: iNP.c プロジェクト: SherryDong/LEGO
/* function to compute the jaccard accuracy of comparing a partitioned network with a defined network */ 
double jaccard (char answer_file[], char input_file[]) { 
	double sim, max, sum1, sum2, acc;
	int overlap, num_lines, num_nodes;
	char *tmp_nodes;
	int i,j, k, l, num_edges, *pnum_edges, num_modules, *pnum_modules, num_answer_modules, *pnum_answer_modules;
	ModulePtr modules, module, answer_modules, answer_module;

	num_answer_modules = 0;
	pnum_answer_modules = &num_answer_modules;
	num_lines = process_file(answer_file);
	answer_modules = (ModulePtr) malloc(num_lines * sizeof(ModuleStr)) - 1;

	num_modules = 0;
	pnum_modules = &num_modules;
	num_lines = process_file(input_file);
	modules = (ModulePtr) malloc(num_lines * sizeof(ModuleStr)) - 1;

	read_modules(answer_file, pnum_answer_modules, answer_modules);
	read_modules(input_file, pnum_modules, modules);

	num_nodes = 0;
	for (i = 1; i <= num_modules; i ++) {
		module = modules + i;
		for (j = 1; j <= module->num_nodes; j ++) {
			if (num_nodes < module->nodes[j]) {
				num_nodes = module->nodes[j];
			}
		}
	}
	sum1 = 0; sum2 = 0;
	for (i = 1; i <= num_modules; i ++) {
		module = modules + i;
		tmp_nodes = (char *) calloc(num_nodes, sizeof(char)) - 1;
		for (j = 1; j <= module->num_nodes; j ++) {
			tmp_nodes[module->nodes[j]] = 1;
		}
		max = 0;
		if (module->num_nodes == 0) { continue;}
		for (l = 1; l <= num_answer_modules; l ++) {
			answer_module = answer_modules + l;
			overlap = 0;
			for (j = 1; j <= answer_module->num_nodes; j ++) {
				if (tmp_nodes[answer_module->nodes[j]]) {
					overlap ++;
				}
			}
			sim = (double) overlap / (module->num_nodes + answer_module->num_nodes - overlap);
			if (max < sim) {
				max = sim;
			}
		}
		sum1 += max * module->num_nodes;
		sum2 += module->num_nodes;
		free(tmp_nodes + 1);
	}
	acc = (double) sum1 / sum2;
	for (i = 1; i <= num_modules; i ++) {
		module = modules + i;
		if (module->num_nodes == 0) { continue;}
		free (module->nodes + 1); 
	}
	for (i = 1; i <= num_answer_modules; i ++) {
		module = answer_modules + i;
		if (module->num_nodes == 0) { continue;}
		free (module->nodes + 1); 
	}
	free(answer_modules + 1); 
	free(modules + 1); 
	return acc;
}