【发布时间】:2011-10-27 20:06:17
【问题描述】:
我有一个 1 到 100 之间的数字向量(这并不重要),它的大小可以在 3 到 1.000.000 之间。
如果有人可以帮助我从该向量中获得 3 个值唯一*组合。
*独特
示例:我在数组中有以下值:1[0] 5[1] 7[2] 8[3] 7[4]([x] 是索引)
在这种情况下 1[0] 5[1] 7[2] 和 1[3] 5[1] 7[4] 是不同的,但是 1[0] 5[1] 7[2] 和 7[ 2] 1[0] 5[1] 相同(重复)
当我处理大量值(例如 1.000.000)时,我的算法有点慢。所以我想要的是一种更快的方法。
for(unsigned int x = 0;x<vect.size()-2;x++){
for(unsigned int y = x+1;y<vect.size()-1;y++){
for(unsigned int z = y+1;z<vect.size();z++)
{
// do thing with vect[x],vect[y],vect[z]
}
}
}
【问题讨论】:
-
你确定数字在1-100之间的属性不重要吗?
-
您的目标是获得所有可能的combination 值吗?如果你有 10^9 个值,你最终会得到 10^27 / 3 个组合来测试。多次“思考”可能会很昂贵......
-
1,000,000 个值有 1,000,000*999,999*999,998/6 个唯一组合。即使您立即获得这些组合中的每一个,光看它们也需要很长时间!
-
您的示例(不是代码)令人困惑
-
1[0] 5[1] 7[2] and 1[3] 5[1] 7[4] are diferent你确定,100% 确定吗?如果是这样,那么您将无法获得更优化(在单个线程中)。
标签: c++ performance algorithm