我试图找到优化问题中两个阵列的无主导值。试图找到两个阵列的无主导解决方案
我有两个阵列,lost_bars_array
和prices_array
。我想要做的是最小化丢失的酒吧,并最大限度地提高价格。我想要得到一个名为no_dominated
的最终数组,其中两个数组的非主导值的索引是一样的。这很容易理解。让我用一个例子来解释一下。
我们有inital两个数组:
的理论框架的过程是这样的:
获得的第一个值
2.获取第二个(索引#1),看看它是否比第一个更好。这意味着我们必须看看第二个人是否失去了更少的酒吧和更大的价格。情况并非如此,它有很少的杠杆,但价格也很便宜,所以我们不能说这是一个更好的解决方案。我们把它保存为更多钞票的解决方案
现在到了下一个,索引#2,这一次提高了索引#1的解决方案,因为它具有较少的丢失BRS和更大的代价。但它并没有改善#0号指数,因为它损失较少,而且价格也较低。因此,我们将索引#0和索引#2保存为可能的解决方案。
4.指数#3,#4,有更多的损失吧,少的价格,所以才拒绝这些可能的解决方案。
5.最后,索引#5,具有较少的丢失的条和更多的价格比索引#0,因此,索引#0溶液被拒绝,并最终没有主导的值将是的索引#的那些2和索引#5。
这是我到目前为止尝试过的。
#include <stdio.h>
int main(int argc, char** argv)
{
int lost_bars_array[] = {15, 10, 8, 15, 17, 9};
int prices_array[] = {35, 25, 30, 10, 15, 36};
int no_dominated[6];
int cont = 6;
for (int actual_pos = 0; actual_pos < cont; actual_pos++)
{
if (actual_pos == 0)
{
no_dominated[actual_pos] = actual_pos;
}
else
{
// Here's where I've the problems, I dont know how to handle the arrays
for (int p = 0; p < actual_pos; p++)
{
if (lost_bars_array[p] > lost_bars_array[p + 1] &&
prices_array[p] < prices_array[p + 1])
{
no_dominated[p] = p;
}
}
}
}
printf("\nThe non-dominated solutions index are: %d");
for (int i = 0; i < 6; i++)
{
printf(" %d ", no_dominated[i]);
}
printf("\n");
return 0;
}
该代码应输出索引2 5
作为解决方案。 我希望我解释正确的问题。
任何帮助表示赞赏。提前致谢。
'问题应该输出2 5作为解决方案。“这使问题成为读者的练习。考虑改写。 – devnull
你对处理数组有什么不了解? –
假设'no_dominated'包含你想要从你的例子中保存的索引,你需要一个单独的计数器来处理'no_dominated'(不是p),只有当找到可能的解决方案时才会增加(在你的例子中,它永远不会如果我改变了'lost_bars_array'和'prices_array',那么这个失败似乎就失败了,因为你最多有3个索引被保存了,所以内部循环只需要遍历这些索引 – Evert