算法导论第四章思考题

4-1

4-2

4-3

f.

g.

h.

i.

j.

4-4

4-5

4-6

a.

b.

c.

d.

typedef struct array {
    int m;
    int n;
    int step;
    int *data;
} array;

int get(array A, int i, int j) {
    return A.data[((i + 1) * A.step - 1) * A.n + j];
}

array half(array a) {
    array result = { a.m, a.n, a.step * 2, a.data };
    return result;
}

int height(array array) {
    return array.m / array.step;
}

int min_index(array A, int row, int left, int right) {
    int min = left;

    for (int i = left; i < right; i++) {
        if (get(A, row, i) < get(A, row, min)) {
            min = i;
        }
    }

    return min;
}

void find_minimums(array A, int *mins) {
    if (height(A) == 1) {
        mins[0] = min_index(A, 0, 0, A.n);
    } else {
        array evens = half(A);
        int even_minimums[height(evens)];

        find_minimums(evens, even_minimums);

        int leftmost = 0;

        for (int i = 0; i < height(evens); i++) {
            leftmost = min_index(A, 2 * i, leftmost, even_minimums[i] + 1);

            mins[2 * i]     = leftmost;
            mins[2 * i + 1] = even_minimums[i];
        }

        if (height(A) % 2) {
            mins[height(A) - 1] = min_index(A, height(A) - 1, leftmost, A.n);
        }
    }
}

e.

猜你喜欢

转载自blog.csdn.net/sscout/article/details/82229182
今日推荐