【发布时间】:2018-04-13 01:12:54
【问题描述】:
所以,我有一个二维数组,int a[X][Y];
X 可以达到10 000 000,Y 最大6。
给定一个数组 int v[Z] (Z ),我必须查看是否在 a 中找到包含来自 v 的所有元素的行。
对于这个问题,最快的算法是什么?你将如何实现它?
我已经尝试过经典的逐行搜索,然后用fors搜索2个,一个用于v元素,一个用于a元素,但耗时太长。
最好(最快)的方法是什么?
int check()
{
int nrfound;
for (int l = 0; l < lines_counter; l++) for each line in a array
{
nrfound = 0;
for (int i = 0; i < n; i++) { // for each element in v array
for (int j = 0; j < m; j++) // for each element in a[l] line
if (v[i] == a[l][j])
nrfound++;
if (nrfound == Z)
return 0;
}
}
return 1;
}
【问题讨论】:
-
@EugeneSh.: 你在想
a[X] == v吗?因为问题似乎是在询问a[X]是否是v的超集... -
您也可以将工作拆分为几个线程。
-
你应该发布你的代码,也许有一些微优化会很有帮助,但你错过了它们。当您经验不足时,通常会发生这种情况。
-
“最快的算法” --> 最坏的情况,或者平均来说有很宽的 `int 范围?
-
我立即看到了改进,而不是计算值的数量是否相等,而是在第一个不相等的值上中止。