c++中两个字符串的互相关
cross correlation of two string in c++
考虑我有两个1和0的矩阵。我想把它保存为bool Matrix
,但opencv
没有这样存储,而是存储为uchar Mat
。因此,我的空间增加了8倍。(每个元素是8位而不是1位)。
我的代码基本如下:
Mat mat1, mat2; //I want each index to be 1 bit
load(mat1); //data size is not important in memory
load(mat2);
corr2(mat1, mat2); //this corr2 is same as Matlab's cross correlation.
这部分我做了1000万次。因此加载需要花费大量时间。我的矩阵是1K*1K,所以我可以将它们存储为1MB,但我希望它们是128KB(matlab存储大约178KB)。
这是我的问题:我想把矩阵存储为string
,而不是Mat
运算,我想使用字符串。
例如,mat1 and mat2
的大小为2*8。
mat1:
0 1 0 0 0 0 1 0 (66=B)
0 1 1 1 0 1 1 1 (122=y)
mat2:
0 1 0 0 0 0 1 1 (67=C)
0 1 1 1 1 0 0 0 (122=z)
我将存储str1=By
和str2=Cz
是否有方法交叉关联str1和str2
提前感谢,
注意:这不是一个答案,而是一个长注释。我把它作为一个答案发布,以避免在OP.的评论部分发送垃圾邮件
存储1M的数字类型元素在任何现代计算机上都不会成为问题。
你应该学习更多关于C和内存存储的知识;bool不是一个基本类型,因此bool存储只是虚拟存在的。将几个比特打包成一个char是个好主意,但如果你想提高效率,你应该看看C++的比特集。
要明白,在硬盘上存储数据的方式和最适合处理活动内存(如RAM)的格式之间可能存在显著差异。这可能是Matlab存储空间奇怪的原因;存储附加信息和/或在看似低效的存储单元中通常是期望的,以使算法更容易写入并且基本操作在CPU上更快地执行。
总的来说,我认为像你建议的那样切换到"bool-packed chars"存储的优势在处理速度方面可以忽略不计,而且肯定会导致编程工作困难,并模糊维护过程。您最好坚持使用字符进行处理,并切换到单位存储进行磁盘写操作。
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 这两个C++语句连接字符串有什么区别?
- 两个字符串之间的数学运算
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 如何在 main 函数中输出两个新字符串C++?
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)