使用m.file词搜索算法(Word search algorithm using an m.fil

2019-11-02 00:51发布

我一直在使用多个字符串的细胞Matlab的已经实施我的算法,但我似乎无法通过读取文件来做到这一点。

MATLAB的,我为每一个线串的细胞,我们姑且称之为线。

所以,我得到

     line= 'string1' 'string2' etc
     line= 'string 5' 'string7'...
     line=...

等等。 我有超过线读取数百。

我正在试图做的是从第一线进行比较的话本身。 然后组合第一和第二线,并且在第二行到组合式电池比较的话。 我累积每个小区我读和最后读取的细胞进行比较。

这里是我的代码上

每行= A,B,C,D,...

for(i=1:length(a))
for(j=1:length(a))
  AA=ismember(a,a)
  end

  combine=[a,b]
  [unC,i]=unique(combine, 'first')
  sorted=combine(sort(i))

  for(i=1:length(sorted))
for(j=1:length(b))
  AB=ismember(sorted,b)
 end
 end

 combine1=[a,b,c]

.....当我看到我的文件,我创建了一个while循环读取整个脚本才结束,所以我怎么能我实现我的算法,如果我的所有字符串的细胞具有相同的名称?

    while~feof(fid)
    out=fgetl(fid)
    if isempty(out)||strncmp(out, '%', 1)||~ischar(out)
    continue
    end
    line=regexp(line, ' ', 'split')

Answer 1:

假设你的数据文件名为data.txt ,其内容为:

string1 string2 string3 string4
string2 string3 
string4 string5 string6

一个非常简单的方法,只保留第一唯一出现的是:

% Parse everything in one go
fid = fopen('C:\Users\ok1011\Desktop\data.txt');
out = textscan(fid,'%s');
fclose(fid);

unique(out{1})
ans = 
    'string1'
    'string2'
    'string3'
    'string4'
    'string5'
    'string6'

如前所述,这种方法可能不若工作:

  • 您的数据文件中有违规行为
  • 你真正需要的比较指标

编辑:为性能

% Parse in bulk and split (assuming you don't know maximum 
%number of strings in a line, otherwise you can use textscan alone)

fid = fopen('C:\Users\ok1011\Desktop\data.txt');
out = textscan(fid,'%s','Delimiter','\n');
out = regexp(out{1},' ','split');
fclose(fid);

% Preallocate unique comb
comb = unique([out{:}]); % you might need to remove empty strings from here

% preallocate idx
m   = size(out,1);
idx = false(m,size(comb,2));

% Loop for number of lines (rows)
for ii = 1:m
    idx(ii,:) = ismember(comb,out{ii});
end

请注意,生成idx是:

idx =
     1     1     1     1     0     0
     0     1     1     0     0     0
     0     0     0     1     1     1

将其保持在这一形式的优点在于,你对空间节省相对于一个单元阵列(其施加112个字节每小区的开销)。 您也可以将其存储为稀疏阵列上的存储成本可能提高。

要注意,另一件事是,即使逻辑阵列比如双阵列中,索引,只要超过元素都是假的,你仍然可以使用它(并通过建设上述问题,IDX满足此要求)长。 一个例子来阐明:

A = 1:3;
A([true false true false false])


文章来源: Word search algorithm using an m.file