从迭代中划分和征服

时间:2014-09-17 12:50:27

标签: algorithm divide-and-conquer

给定具有n个元素的基于(1的)阵列a和函数f(i,j)(1≤i,j≤n)为(i-j)2 + g(i,j)2。函数g由以下伪代码计算:

 int g(int i, int j)
 { 
   int sum = 0;
   for (int k = min(i, j) + 1; k <= max(i, j); k = k + 1)
     sum = sum + a[k];
   return sum; 
} 

找到一个值mini≠j f(i,j)。

我为此创建了一个迭代强力算法,但解决方案需要分而治之。

蛮力算法:

def g_fun(i,j):
    sum=0
    for k in xrange(min(i,j)+1,max(i,j)+1):
        sum+=arr[k-1]
    return sum

def f_fun(i,j):
    s=g_fun(i,j)
    return ((i-j)**2 + s**2)

n=input("n : ")
arr=map(int,raw_input("Array : ").split())
low=100000 #infinity
for i in xrange(1,n+1):
    for j in xrange(1,n+1):
        if i!=j:
            temp=f_fun(i,j)
            if temp < low:
                low=temp
print low

0 个答案:

没有答案