投资者和游泳池 - 回溯

时间:2016-04-17 06:37:45

标签: algorithm recursion backtracking

我决定更深入地了解回溯的概念,我有以下任务:

鉴于N个投资者,M个城市,N个M矩阵P的投资者偏好(P [i,j] = 1,当第i个投资者希望该池建在第j个城市时; P [i, j] = 0然后他是中立的,当P [i,j] = -1时他是否持怀疑态度)和接受程度L(如果对于给定的地点选择,投资者偏好的总和大于或等于到L然后我们认为他确信)。找到可以说服的最大数量的投资者以及应该建造游泳池的城市。

我尝试过使用回溯,但我想知道是否有可能对其进行更优化。目前,在每个递归级别上,我都会跟踪可能被说服的人数。如果这个数字小于或等于我当前的最大值,那么我会返回(没有更好的答案)。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您正在寻找的,但通过一个小技巧,您可以将问题表达为整数线性程序(ILP)。然后,您可以使用整数线性编程求解器(例如,GLPK)来找到最佳解决方案。

files: [ 'bower_components/jquery/dist/jquery.js', 'bower_components/angular/angular.js', 'bower_components/angular-mocks/angular-mocks.js', ... ] 为0-1整数变量(<beans profile="cloud"> <context:property-placeholder location="classpath*:META-INF/spring/${ENV}.properties" /> </beans> 范围超过投资者),s[i] 0-1整数变量在城市范围内,i为大数(c[j]会这样做。)

然后,您的问题是最小化K,使L + the number of investorssum(s[i])。最优解决方案中i的值是不满意投资者的数量,sum(P[i, j]*c[j]) + s[i] * K >= L表示是否在城市sum(s[i])建立资源池。

这个问题的表述是ILP的标准形式,所以你很高兴。