微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法合并两个或多个for 循环来降低整体时间复杂度?

如何解决有没有办法合并两个或多个for 循环来降低整体时间复杂度?

其实我已经解决了比较计算结果和返回最小值的问题。虽然我成功地实现了逻辑并精细地执行了代码,但未能降低时间复杂度。

#include<iostream>
#include<algorithm>
#include<climits>

using namespace std;

int checkMinimum(int array[],int index)
{
  int result = INT_MAX;

  for(int i = 0; i < index; ++i)
    for(int j = 0; j < index; ++j)
      if(i != j && (min(result,((array[i] & array[j]) ^ (array[i] | array[j]))) < result))
        result = min(result,((array[i] & array[j]) ^ (array[i] | array[j])));

  return result;
}

void getMinimum()
{
  int index;
  cin >> index;
  int array[index];

  for(int i = 0; i < index; ++i)
    cin >> array[i];

  cout << checkMinimum(array,index) << endl;
}

int main()
{
  int limit;
  cin >> limit;
  while(limit--)
    getMinimum();

  return 0;
}

在研究了 for 循环并试图将它们合并在一起之后,完全没有帮助,因为很难将循环的条件合二为一。

#include<iostream>
#include<algorithm>
#include<climits>

using namespace std;

int checkMinimum(int array[],int index)
{
  int result = INT_MAX;

  for(int i = 0,j = index - 1; i != j; ++i,--j)
    if((min(result,((array[i] & array[j]) ^ (array[i] | array[j]))) < result))
      result = min(result,index) << endl;
}

int main()
{
  int limit;
  cin >> limit;
  while(limit--)
    getMinimum();

  return 0;
}

那么我怎样才能减少这个的时间复杂度?

解决方法

checklist(state,county,id) 等价于 checklistitem(checklist_id)(array[i] & array[j]) ^ (array[i] | array[j])array[i] ^ array[j]& 都是按位运算;写真值表为一位)。>

为了最小化XOR,最重要的是高位位一致。假设输入有几个数字 ^ 和几个数字 |。尝试用 0xxxx1xxxx 配对是没有意义的;即使 0xxxx 部分完全相同,XOR 也是 1xxxx,而任何 xxxx 与任何 10000 的 XOR,或任何 {{1} } 与任何 0xxxx 最多为 0xxxx,小于 1xxxx

在每个组内的下一位和之后的一位重复此逻辑,可以显示具有最小 XOR 的对按排序顺序彼此相邻。因此,您可以对数组进行排序并计算 1xxxx 相邻对的最小值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。