使用Backpointers在Balanced Partition中获取子集的元素

时间:2012-12-14 09:10:10

标签: java processing partition-problem

我想实现Balanced Partition probelm并使用backpointers获取子集的元素。

我对Backpointers有疑问:

MIT's Dynamic Programming Practice Problems Nr。的帮助下。 7和this example code,我设法在Processing中获得了一个工作程序(因为我是一个编程新手......)。

现在我希望能够获得两个子集的元素。

在麻省理工学院的视频中,我们解释说这可以“使用维护背景的标准技巧”来实现。

有人知道如何做到这一点吗?

int N=4;
int[] Weights=new int[N];
int Deviation=5;


void setup()
{
 for(int i=0;i<N;i++)
{
 Weights[i]=10+int(random(-Deviation, Deviation));
 println(i+"   "+Weights[i]);
} 

println("-------------------");

BalancedPartition(Weights,N);

}


void BalancedPartition ( int a[] , int n ){

    int sum = 0;
    for( int i = 0 ; i < n ; i++)
        sum += a[i];

    int[] s = new int[sum+1];

    s[0] = 1;
    for(int i = 1 ; i < sum+1 ; i++)    
    {
      s[i] = 0;
    }

    int ans = 0;
    int diff = 1000000000;


    for(int i = 0 ; i < n ; i++)
    {
        for(int j = sum ; j >= a[i] ; j--)
        {

            s[j] = s[j] | s[j-a[i]];
            if( s[j] == 1 )
            {   

                if( diff > abs( (sum/2) - j) )
                {

                    diff = abs( (sum/2) - j );
                    ans = j;


                 }

            }

        }
    }
println("Sum Set 1: "+ans+"        Sum Set 2: "+(sum-ans)+"          Difference: "+abs(ans-(sum-ans)) );



}

0 个答案:

没有答案
相关问题