【发布时间】:2013-05-16 17:32:53
【问题描述】:
这对我想做的事情来说太长了。 有什么办法可以加快速度?
编辑抱歉,我一直遇到质量邮政编码问题,所以我只发布了最低限度。
我想做的是一个奥马哈扑克净值计算器。
A-它需要我们给他的 4 张牌(myhand[4]),然后检查所有可能的手牌组合,看看是否有任何重复。
B-如果有任何重复,它想删除包含那只手的向量的行 (所以当我们稍后计算胜率时,我们不会针对某人不可能拥有的牌进行计算)
int myhand[4] = { 3, 12, 22, 10 };
vector<vector<int> > vec(4, vector<int>(270725));
for (int m = 0; m < vec[0].size(); m++) { // A
for (int k = 0; k < 4; k++) {
for (int j = 0; j < 4; j++)
if (myhand[k] == vec[j][m]) {
for (int i = 0; i < 4; i++) {
vec[i].erase(vec[i].begin() + m); // B
}
k = 0;
j = 0;
break;
}
}
}
有没有办法提高这段代码的效率?
谢谢, 卡文
【问题讨论】:
-
这一切有什么意义?了解代码应该在高层次上实现什么以了解如何最好地优化它会非常有用。
-
看起来很奇怪... 4个for循环看起来有点矫枉过正
-
转置矩阵可能会提高性能。
-
270725 已经是 52 个无序的 4 个。所以你至少不需要 size() = 270725 但 size() = 52 的 4 个 vec。顺便说一句 - 你的内部向量只是保持零,这不是你需要的。
-
这是不是运行太慢了?如果不是,我们为什么要玩它? :)
标签: c++ performance vector