Ejemplo n.º 1
0
inline long long test(Object* (*make)(int), int (*match)(Object*))
{
    size_t a = 0; // Accumulator to make sure compiler doesn't take some loop invariants out
    size_t j = 0; // Incremental number for the current path/object combination. Ensures all path get tested.
    std::vector<long long> medians(K); // Final verdict of medians for each of the K experiments
    std::vector<Object*>   objects(N);
    std::vector<long long> timings(M);

    for (size_t k = 0; k < K; ++k)
    {
        for (size_t n = 0; n < N; ++n)
            objects[n] = make(j++);

        for (size_t m = 0; m < M; ++m)
        {
            time_stamp liStart  = get_time_stamp();

            for (size_t i = 0; i < N; ++i)
                a += match(objects[i]);

            time_stamp liFinish = get_time_stamp();
            timings[m] = liFinish-liStart;
        }

        for (size_t n = 0; n < N; ++n)
            delete objects[n];

        medians[k] = display("test", timings); // We are looking for a median per N iterations
    }

    std::sort(medians.begin(), medians.end());
    return cycles(medians[K/2])/N;
}
Ejemplo n.º 2
0
static void mincross_sweep(Agraph_t* g, int dir, boolean reverse)
{
    int     r,other,low,high,first,last;
    int     hasfixed;

		low = GD_minrank(g);
		high = GD_maxrank(g);
		if (dir == 0) return;
		if (dir > 0)  { first = low + 1; last = high; dir = 1;}		/* down */
		else				  { first = high - 1; last = low; dir = -1;}    /* up */

    for (r = first; r != last + dir; r += dir) {
        other = r - dir;
        hasfixed = medians(g,r,other);
        reorder(g,r,reverse,hasfixed);
    }
    transpose_sweep(g,NOT(reverse));
	savebest(g);
}
Ejemplo n.º 3
0
int ChrRegionCluster::mad(std::vector<int>& v) {
    int m = median(v);
    std::vector<int> medians(v.size());
    std::transform(v.begin(), v.end(), medians.begin(), [m](int i) { return abs(i - m); });
    return median(medians);
}