根据规则将文件移动到另一个文件夹复杂度 O(n3) 优化
Moving files to another folder based on a rule Complexity O(n3) optimization
您好,我正在尝试根据规则移动 38 个文件夹中的 25000 张图像。每个文件夹代表图像所属的 class 个。我还有 38 个 .txt 文件,其中包含属于 class 的图像名称。该算法的复杂度为 O(n3) ,更确切地说是 O(25000*38*~3000)。仅仅移动 3000 张图像就花了我 12 个小时。移动所有图像大约需要 30 天。我可以做些什么来优化我的代码?
parfor i=1:length(imNames) %imNames is a vector that contains the name of the 25000 images .
for k=1:38 %number of .txt files
nameOfFiles=filenames(k).name;
%filenames stores the names of the 38 .txt files
nameOfFiles=erase(nameOfFiles,'.txt'); % removing .txt extension of files
for j =1:length(data.(nameOfFiles)) % length of a particular .txt file(number of images within a file)
%data is a struct that has 38 fields/classes each field containing the names of images withing a .txt file
if strcmp(char(imNames(i)),data(j).(nameOfFiles))
%Compares value of vector that contains 25000 values with value from file nameOfFiles
copyfile(char(imNames(i)), nameOfFiles); % copies file to a folder nameOfFiles
end
end
end
正如 nekomantic 所说,parfor 实际上减慢了我的程序。我的算法也可以减少到 O(n2)。我实际上并不需要外面的。我还在 C++ 中移动了我的算法,它的移动速度提高了 1000 倍。谢谢您的帮助 。
for k=1:38
nameOfFiles=filenames(k).name;
nameOfFiles=erase(nameOfFiles,'.txt');
for o=1:length(data.(nameOfFiles))
copyfile(data(o).(nameOfFiles), nameOfFiles);
disp(o)
end
end
您好,我正在尝试根据规则移动 38 个文件夹中的 25000 张图像。每个文件夹代表图像所属的 class 个。我还有 38 个 .txt 文件,其中包含属于 class 的图像名称。该算法的复杂度为 O(n3) ,更确切地说是 O(25000*38*~3000)。仅仅移动 3000 张图像就花了我 12 个小时。移动所有图像大约需要 30 天。我可以做些什么来优化我的代码?
parfor i=1:length(imNames) %imNames is a vector that contains the name of the 25000 images .
for k=1:38 %number of .txt files
nameOfFiles=filenames(k).name;
%filenames stores the names of the 38 .txt files
nameOfFiles=erase(nameOfFiles,'.txt'); % removing .txt extension of files
for j =1:length(data.(nameOfFiles)) % length of a particular .txt file(number of images within a file)
%data is a struct that has 38 fields/classes each field containing the names of images withing a .txt file
if strcmp(char(imNames(i)),data(j).(nameOfFiles))
%Compares value of vector that contains 25000 values with value from file nameOfFiles
copyfile(char(imNames(i)), nameOfFiles); % copies file to a folder nameOfFiles
end
end
end
正如 nekomantic 所说,parfor 实际上减慢了我的程序。我的算法也可以减少到 O(n2)。我实际上并不需要外面的。我还在 C++ 中移动了我的算法,它的移动速度提高了 1000 倍。谢谢您的帮助 。
for k=1:38
nameOfFiles=filenames(k).name;
nameOfFiles=erase(nameOfFiles,'.txt');
for o=1:length(data.(nameOfFiles))
copyfile(data(o).(nameOfFiles), nameOfFiles);
disp(o)
end
end