C++是检查多维数组中匹配项的最佳优化方法
C++ Best optimize way to check matches in multidimensional array
我有多维数组,例如:
int arr[4][3] ={{12, 29, 11, 22},
{14, 22, 22, 22},
{14, 14, 67, 22},
{14, 18, 14, 45}};
现在我喜欢通过预先定义的规则来查找匹配,例如:
查找所有水平的"22"个数字,并在原始数据中查找大于2的数字(数组中的第1行)或找到所有垂直的"14"个数字,并在垂直线(第1、2、3行)中找到大于2的数字也按次细序(行[1,0],[2,1],[3,2])
现在我知道我可以扫描阵列中的每个规则并保持macing向量
,但假设阵列是15x15,我有20个规则,这可能会非常混乱
有某种模式或算法吗
最后我喜欢模拟一些类似老虎机匹配支付线的东西
将每个规则分成两部分。
- 第一部分仅取决于单元格的内容
- 第二部分取决于模式
只扫描整个阵列一次。对于匹配第一部分的单元格,在掩码中设置一个位。扫描完成后,使用逻辑运算来匹配第二部分中的模式。根据规则的不同,数组中匹配的每个值可能都有一个位掩码。
例如,采用以下规则:1)行中有两个以上的"22",2)列中有两条以上的"14"。扫描阵列,查找22或14。请注意,从数组中读取每个数字一次并进行所有比较要高效得多,因为一旦值在CPU缓存中,其他比较就"免费"了。这两个位掩码将是"22"位掩码和"14"位掩码。
对于在行或列中查找多个位,有相当明显的算法。对于R x C矩阵。
A1[C]
A2[C]
for r in 0 .. R-1
A2 |= (A1 & Matrix.row(r))
A1 |= Matrix.row(r)
最后,A2将是具有两个或多个比特的所有列的掩码。要查找大于2的数字,只需添加A3等
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?