我有一个非常大的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 在里面 SF2 不在里面 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中使用的命令,所以请耐心等待...我不能使用非常复杂的代码.我对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)
但这也不起作用:(
我究竟做错了什么 ?
请帮忙.谢谢 !