相关疑难解决方法(0)

在大矩阵中找到矩阵

我有一个非常大的n*m矩阵S.我想有效地确定F内部是否存在子矩阵S.大矩阵S的大小可以大到500*500.

澄清一下,请考虑以下事项:

S = 1 2 3 
    4 5 6
    7 8 9

F1 = 2 3 
     5 6

F2 = 1 2 
     4 6
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

  • F1 在里面 S
  • F2 不在里面 S

矩阵中的每个元素都是32-bit整数.我只能想到使用蛮力方法来查找是否F是子矩阵S.我用谷歌搜索找到一个有效的算法,但我找不到任何东西.

是否有一些算法或原则可以更快地完成它?(或者可能是一些优化蛮力方法的方法?)

PS统计数据

A total of 8 S
On average, each S will be matched against about 44 F.
The probability of success match (i.e. F appears in a S) …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm

6
推荐指数
1
解决办法
8039
查看次数

如何从更大的矩阵中提取2x2子矩阵

我是一个非常基本的用户,并不太了解C中使用的命令,所以请耐心等待...我不能使用非常复杂的代码.我对stdio.h和ctype.h库有一些了解,但就此而言.我在txt文件中有一个矩阵,我想根据输入的行数和列数来加载矩阵

例如,我在文件中有一个5乘5矩阵.我想提取一个特定的2乘2子矩阵,我该怎么做?

我创建了一个嵌套循环:

FILE *sample
sample=fopen("randomfile.txt","r"); 
for(i=0;i<rows;i++){
  for(j=0;j<cols;j++){
     fscanf(sample,"%f",&matrix[i][j]);
   }
 fscanf(sample,"\n",&matrix[i][j]);
}
fclose(sample);
Run Code Online (Sandbox Code Playgroud)

可悲的是代码不起作用..如果我有这个矩阵:

5.00 4.00 5.00 6.00 
5.00 4.00 3.00 25.00 
5.00 3.00 4.00 23.00 
5.00 2.00 352.00 6.00
Run Code Online (Sandbox Code Playgroud)

并输入3为行,3为列,我得到:

5.00 4.00 5.00
6.00 5.00 4.00
3.00 25.00 5.00
Run Code Online (Sandbox Code Playgroud)

不仅这不是一个2乘2的子矩阵,但即使我想要前3行和前3列,它也不能正确打印....

我需要从第3行和第3列开始,然后采用2乘2的子矩阵!

我应该最终得到:

4.00 23.00 
352.00 6.00
Run Code Online (Sandbox Code Playgroud)

我听说我可以使用fgets和sscanf来实现这一目标.这是我的试用代码:

fgets(garbage,1,fin);
sscanf(garbage,"\n");
Run Code Online (Sandbox Code Playgroud)

但这也不起作用:(

我究竟做错了什么 ?

请帮忙.谢谢 !

c matrix submatrix

0
推荐指数
1
解决办法
9530
查看次数

标签 统计

algorithm ×1

c ×1

c++ ×1

matrix ×1

submatrix ×1