我正在尝试基于具有均匀分布的数值向量的匹配来执行方法。这些向量表示大整数,stoked(cpp11中可能的整数64)因此为double和0和power(5,20)之间的每个x
值。
匹配函数将向量A确定向量A的元素xi
的第一个位置。
根据两个不同的概念,我使用两种方法:
首先,已经实现的匹配方法基于对字符串向量非常有效的哈希表。
我将匹配函数与以下代码一起使用,因为模板描述了Rcppsugar
:
// [[Rcpp::export]]
IntegerVector Match(NumericVector A, NumericVector B) {
sugar::IndexHash<14> tab = wrap(A);
return tab.fill().lookup(B);
}
感谢fastmatch
包,我使用了fmatch
函数来提供最佳性能。
否则,我想到了二进制搜索过程,但这种方法需要排序巫婆是一个大问题。以下代码显示了所使用方法的原型。
// [[Rcpp::export]]
NumericVector sort_stl(NumericVector A) {
NumericVector tmp = clone(A);
std::sort(tmp.begin(), tmp.end());
return tmp;
}
// [[Rcpp::export]]
NumericVector BINmatch(NumericVector A, NumericVector B) {// A and B previously sorted
const int a = A.size(); const int b = B.size();
int j = 0; int i = 0;
NumericVector res(a,-1.0);// empty values are coding with -1;
for (i = i; i < a; i++) {
for (j = j; (j < b) & (B[j] <= A[i]); j++) {
if (B[j] == A[i]) {
res[i] = j;
break;
}
}
}
return res;
}
xi
?BINmatch
的排序速度?