clc;clear all;close all;
fileID = fopen('H:\dictionary.txt');
S = textscan(fileID,'%s','Delimiter','\n') ;
fclose(fileID);
S = S{1} ;
% remove empty cells
S = S(~cellfun('isempty',S));
n=length(S);
k=0;
for i=1:n
for j=1:n
k=k+1;
y(k,1)=strcat(S(i),S(j))
end
end
这是我的sha-1哈希代码。我在for循环中遇到问题,在行中生成所有可能的组合
y(k,1)=strcat(S(i),S(j)).
运行正常。但它花了太长时间。我已经运行了这个代码2天仍未完成,因为我的字典包含超过5000个单词。请建议我一些好主意,以便更快地完成并改进并破解它。
答案 0 :(得分:0)
由于你没有提供一些数据来测试代码,我创建了自己的测试数据,这是一个包含400个单词的单元格数组:
% create cell array with a lot of words
S = repmat({'lalala','bebebebe','ccececeece','ddededde'},1,100);
这是代码中的一些小变化,但对性能影响很大。
请注意,变量“y”在此处命名为“yy”,因此您只需复制并粘贴代码即可将其与现有代码进行比较:
% Preallocate memory by specifying variable and cell size
yy = cell(n^2,1);
% Measure time
tic
k = 0;
for i=1:n
for j=1:n
k=k+1;
% Replace strcat() with [] and index cell content with S{i} instead
% of indexing the cell itself with S(i)
yy{k}=[S{i},S{j}];
end
end
% Stop and output time measurement
toc
根据我的示例数据,您的代码需要 7.78s 才能运行,改进和建议的代码在我的计算机上 0.23s 。
我建议阅读有关Preallocation的Matlab文档。