栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有效地计算向量组合

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有效地计算向量组合

在C ++中,给出以下例程:

template <typename Iterator>inline bool next_combination(const Iterator first,  Iterator k,       const Iterator last){      if ((first == last) || (first == k) || (last == k))      return false;   Iterator itr1 = first;   Iterator itr2 = last;   ++itr1;   if (last == itr1)      return false;   itr1 = last;   --itr1;   itr1 = k;   --itr2;   while (first != itr1)   {      if (*--itr1 < *itr2)      {         Iterator j = k;         while (!(*itr1 < *j)) ++j;         std::iter_swap(itr1,j);         ++itr1;         ++j;         itr2 = k;         std::rotate(itr1,j,last);         while (last != j)         { ++j; ++itr2;         }         std::rotate(k,itr2,last);         return true;      }   }   std::rotate(first,k,last);   return false;}

然后,您可以继续执行以下操作:

int main(){   unsigned int vec_idx[] = {0,1,2,3,4};   const std::size_t vec_idx_size = sizeof(vec_idx) / sizeof(unsigned int);   {      // All unique combinations of two vectors, for example, 5C2      std::size_t k = 2;      do      {         std::cout << "Vector Indicies: ";         for (std::size_t i = 0; i < k; ++i)         {std::cout << vec_idx[i] << " ";         }      }      while (next_combination(vec_idx,        vec_idx + k,        vec_idx + vec_idx_size));   }   std::sort(vec_idx,vec_idx + vec_idx_size);   {      // All unique combinations of three vectors, for example, 5C3      std::size_t k = 3;      do      {         std::cout << "Vector Indicies: ";         for (std::size_t i = 0; i < k; ++i)         {std::cout << vec_idx[i] << " ";         }      }      while (next_combination(vec_idx,        vec_idx + k,        vec_idx + vec_idx_size));   }   return 0;}

*注1:由于对next_combination常规迭代器面向接口的,任何STL容器支持向前迭代通过迭代器也可以使用,如

std::vector
std::deque
std::list
只是仅举几例。

注意2:
此问题非常适合于记忆技术的应用。在此问题中,您可以创建一个地图,并使用给定组合的矢量和填充它。在计算给定的一组向量的总和之前,您可以查找以查看总和的任何子集并使用这些结果。尽管您执行的求和操作非常便宜且快速,但是如果您执行的计算要复杂得多且耗时,则此技术肯定会带来一些重大的性能改进。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号