获取字符顺序总和的最快方法

The fastest way to get the sum of character orders?

本文关键字:方法 和的 字符 顺序 获取      更新时间:2023-10-16

我正试图找到最快的方法来获得字符串中字符顺序的总和

例如,如果字符串包含:

ABAACA;

那么字符A的总和将是:

(A=0)+(A=2)+(A=3)+(A=5)=10;
 A=10;

我知道一些方法,但花的时间太长了,你能告诉我怎样才能得到最快的金额吗?

我认为用C++实现这一点的最快方法(因为没有其他方法可以描述您的问题)涉及并行处理:

  1. 并行扫描和就地索引
  2. 减少

尽管这可能不是你想要的。

最快的非并行解决方案:

-仔细检查每一个字符。

-如果匹配则增加计数(if(ch=='A')count+=i;)。

没有更快的方法,因为你必须访问每个角色。

不管怎样,如果你有一个有效的解决方案,它可能已经是最快的了。。

如果没有并行工具,最快的解决方案就是访问循环中的每个字符并增加sum。

int count_match ( char* str, int length, char digit )
{
  int output = 0;
  for ( int index = 0; index < length; ++ index )
    output += index & - (str[index] == digit);
  return output;
}

如果字符串的长度在编译时是已知的,那么可以设想将该值模板化,并让编译器为您向量化循环。