我想比较用整数填充的向量的元素,以查看具有相同值(并对它们进行计数)的元素是否为 。快速向量元素比较
因此,例如,如果a[i]==x
,有没有b[j]==x
?
浮现在脑海的第一个实现,当然是最简单的一个:
for (int i=0; i < a.size(); i++) {
for (int j=0; j < b.size(); j++) {
if (a[i]==b[j]) {counter++;}
}
这是这样的大载体放缓。 我曾经想过交替算法,但我对不熟练的实施 是正确的,所以在这里它是,我有又和我的问题:
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (b[j] >= a[i]) {
counter++;
for (int k = i + 1; k < n; k++) {
if (a[k] >= b[j+1]) {
counter++;
for (int l = k + 1; l < m; l++) {
if (b[l] >= a[k]) {
counter++;
....
}
}
}
}
}
}
}
流程是,我开始比较a
的第一个元素与b
的元素。当我点击时,我跳转到矢量b
,并将其下一个元素与a
的元素进行比较,该元素位于a
元素之后,与之前进行比较。 (由于a
和b
的元素存储在升序,一旦b
我正在与比较元件比的a
元件更大的变更向量上> =不==)
这应该是很容易我想,这是一个自称功能的函数。 但我无法将头围住它。
我希望有人能够理解我想要做什么,但目前我无法更好地解释它。从理论上讲,我认为这对于向量的升序应该更快,因为您只需进行N次比较(N代表更大的向量的大小),而不是N*M
。
排序,归并排序 – user3528438
我认为它会是有意义的解决这一算法,而不是试图通过优化循环。例如,对数组进行排序可能会导致相当多的优化。蛮力比较似乎是解决这个问题最不优雅的方式。通常这些阵列有多大? – tadman
矢量的大小高达100万左右 –