Ejemplo n.º 1
0
vector<int> slashBurn(Graph &graph, int K)
{
	//printGraph(graph);
    int p = 0, q = (int)graph.size() - 1;
    vector<int> weightsum(q + 1, 0);
    vector<int> idX(q + 1, 0), xId(q + 1, 0);
    for(int i = 0; i < q + 1; i++){
        idX[i] = xId[i] = i;
    }
    calcWeightSum(weightsum, graph);
    while(q - p + 1 > K){
		if(TKDE){
        /* TKDE: select topK in greedy way */
			for(int i = 0; i < K; i++, p++){
				int maxloc = select_biggest(weightsum, xId, p, q);
				remove_vertex_from_graph(graph, xId[maxloc], weightsum);
				iter_swap(idX.begin() + xId[p], idX.begin() + xId[maxloc]);
				iter_swap(xId.begin() + maxloc, xId.begin() + p);
			}
		}
		else{
		/* ICDM: select topK directly */
			vector<int> maxloc = select_topk(weightsum, xId, p, q, K);
			for(vector<int>::iterator it = maxloc.begin(); it != maxloc.end(); ++it, p++){
				remove_vertex_from_graph(graph, xId[*it], weightsum);
				iter_swap(idX.begin() + xId[p], idX.begin() + xId[*it]);
				iter_swap(xId.begin() + *it, xId.begin() + p);
			}
		}
		//Map or vector, trade-off between space and time
        vector<int> vertexCC(graph.size(), 0);
        vector<pair<int, int> > ccMetric(graph.size());
        find_cc(graph, p, q, xId, idX, vertexCC, ccMetric);
        vector<int> newx2X;
        int Q = sort_vertex(newx2X, vertexCC, ccMetric);
        if(Q == -1){
            break;
        }
        for(int i = Q; i < (int)newx2X.size(); i++){
            remove_vertex_from_graph(graph, xId[newx2X[i]], weightsum);
        }
        shuffle_vertex(newx2X, xId, idX, p);
        q = p + Q - 1;
    }
    return idX;
}
Ejemplo n.º 2
0
static void parse_for_recipients( char* message, char** envp ) {
	int i = 0;
	char *pos;

	while ((pos = find_to(message, i))) {
		add_recipient(pos, 3, envp);
		i = pos - message + 3;
	}

	i = 0;
	while ((pos = find_cc(message, i))) {
		add_recipient(pos, 3, envp);
		i = pos - message + 3;
	}

	i = 0;
	while ((pos = find_bcc(message, i))) {
		add_recipient(pos, 4, envp);
		i = pos - message + 4;
	}
}