线程复杂度在我的程序中?

时间:2015-02-15 17:06:49

标签: c arrays time-complexity linear-programming

前段时间我在codereview.stackexchange中询问我的一个问题。我没有得到足够的答案,很多人告诉我在这里发一个问题只是为了得到更多答案和解决方案。我的问题是接下来的。

  

给出动态数组,我们想从a传递数组元素   文件。文件N中的第一个数字给出了数组长度。他们   遵循N个数字,即数组的实际元素。

     

三兄弟一时间在他们父亲的店里工作。 >商店运作良好,每天都能产生利润   三兄弟可以提供。兄弟们同意他们会分裂   三个连续部分的总时间,不一定相等   持续时间,并且每个人都将在商店中工作   这些部分代表他收集相应的利润。但   他们想公平地达成协议,以便从另外三个人那里收到   从别人那里获利。具体而言,他们希望尽量减少利润   这三个人中最受青睐的人会收到。

现在我创建了一个O(n ^ 2)复杂度的解决方案,但我想知道是否有人有任何其他想法来解决线性复杂性问题。

让我们假设我们有以下输入:

1 1 8 1 1 3 4 9 5 2

输出为15

A=1+1+8+1+1+3B=4+9=13C=5+2=7

Remenber我想要线性复杂性。如果有人认为这只是一件要完成的功课而且我很无聊,那么他就没有地方了。我只是想知道是否有人知道如何解决 C 中的问题。

我的尝试如下:

#include <stdio.h>
#include <limits.h>
#define max(A,B,C) A > (B > C ? B : C) ? A : (B > C ? B : C)
#define N 10

int main()
{
    int e[N] = {1, 1, 8, 1, 1, 3, 4, 9, 5, 2 };
    int i=0;
    int j = N-1;
    int A = e[i];
    int C = e[j];
    int B = 0;
    int x, AL, CR, BL, BR, m, mp = INT_MAX, L, R;
    for(x = i+1 ; x < j; x++) B+=e[x];
    m = max(A,B,C);
    printf("A=%d B=%d C=%d\n", A, B, C);
    while(m < mp)
    {
        AL = A+e[i+1];
        CR = C+e[j-1];
        BL = B-e[i+1];
        BR = B-e[j-1];
        L = max(AL,BL,C);
        R = max(A,BR,CR);
        if(L<R)
        {
            A=AL;
            B=BL;
            i++;
        }
        else
        {
            C=CR;
            B=BR;
            j--;
        }
        mp = m;
        m = max(A,B,C);
        printf("A=%d B=%d C=%d MAX=%d\n", A, B, C, m);
    }
    printf("%d", mp);
    return 0;
}

我不希望有人以上述代码为基础,因为它会在90%的大多数输入中提供错误的输出。

0 个答案:

没有答案