/// <summary> /// The entry point of the algorithm /// </summary> static public void Start() { //Initializing BaseOperations BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); //Iterate through files foreach (FileDescription file in BaseOperations.Files) { bool FoundFolder = false; //iterate through folders foreach (FolderDescription folder in BaseOperations.Folders) { //check the file duration if it fits in the folder if (folder.CheckLength(file.Duration)) { FoundFolder = true; folder.CurrentLength += file.Duration; BaseOperations.MoveFile(file, folder); break; } } //if there is no folder a new one will be created if (!FoundFolder) { FolderDescription folder = BaseOperations.ConstructFolder(); if (!folder.CheckLength(file.Duration)) { throw new ArgumentOutOfRangeException("File size is larger than max folder size"); } folder.CurrentLength += file.Duration; BaseOperations.MoveFile(file, folder); } } }
static public void BestFitFilling(string InputFolderpath, string OutputFolderpath) { BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); // creating output folder if not exist if (!Directory.Exists(OutputFolderpath)) { DirectoryInfo di = Directory.CreateDirectory(OutputFolderpath); } //creating Bestfit folder if not exist string bestfitpath = OutputFolderpath + @"\[5] bestfit"; if (!Directory.Exists(bestfitpath)) { DirectoryInfo di2 = Directory.CreateDirectory(bestfitpath); } //creating files with the names in BFfolders if not exist for (int i = 0; i < BFfolders.Count; i++) { string foldercount = (i + 1).ToString(); string folderpath = bestfitpath + @"\F" + foldercount; if (!Directory.Exists(folderpath)) { DirectoryInfo di3 = Directory.CreateDirectory(folderpath); } string folderMetaData = bestfitpath + @"\F" + foldercount + "_METADATA.txt"; System.IO.FileStream F1 = new FileStream(folderMetaData, FileMode.Create); StreamWriter w1 = new StreamWriter(F1); w1.WriteLine("F" + foldercount); for (int j = 0; j < BFfolders[i].FolderAudios.Count; j++) { string filepath = InputFolderpath + BFfolders[i].FolderAudios[j].name; string filetarget = folderpath + @"\" + BFfolders[i].FolderAudios[j].name; System.IO.File.Copy(filepath, filetarget, true); w1.WriteLine(BFfolders[i].FolderAudios[j].name + " " + BFfolders[i].FolderAudios[j].hours + ":" + BFfolders[i].FolderAudios[j].min + ":" + BFfolders[i].FolderAudios[j].sec); } w1.WriteLine(BFfolders[i].hours + ":" + BFfolders[i].min + ":" + BFfolders[i].sec); w1.Close(); } }
static void Main(string[] args) { //BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); // BaseOperations.SortInDecreasing(); // FittingOperations.worst_fit(@"c:\Audios", @"c:\Output\[4] folderfilling"); //FittingOperations.filling.write(@"c:\Audios", @"c:\Output\[4] folderfilling"); BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); FittingOperations.BestFit.Best_fit(); //set the source (input-audios folder) in the same way here string input = @"C:\Users\pc\Downloads\Project\sample test\sample 1\INPUT\Audios\"; //set the destination(output folder)in the same way here string output = @"C:\Users\pc\Downloads\Project\sample test\sample 1\output\"; FittingOperations.BestFit.BestFitFilling(input, output); ///Just more /// /// }
public static void write(string Source, string Destination) { BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); for (int i = 0; i < 200; i++) { for (int j = 0; j < 800; j++) { dp[i, j] = -2; } } string path = Destination; if (!Directory.Exists(path)) { DirectoryInfo di = Directory.CreateDirectory(path); } int k = 1; string FileName = path; string source = Source; string destination = ""; int no = 0; int h = 0; while (BaseOperations.num_of_rec != 0) { int i = 0; path = Destination; source = Source; destination = ""; FileName = path; DirectoryInfo di; fill(0); no = ans.Count; for (int r = 0; r < 200; r++) { for (int j = 0; j < 800; j++) { dp[i, j] = -2; } } if (no == 1) { for (int num = 0; num < BaseOperations.Audio_files.Count; num++) { path = Destination; FileName = path; source = Source; path += @"\f" + k; di = Directory.CreateDirectory(path); source += @"\" + (BaseOperations.Audio_files[num].index) + ".mp3"; destination = path + @"\" + (BaseOperations.Audio_files[num].index) + ".mp3"; System.IO.File.Copy(source, destination); Console.WriteLine(source + " " + destination); FileName += @"\f" + k + "_MetaData.txt"; System.IO.FileStream F1 = new FileStream(FileName, FileMode.Create); StreamWriter w1 = new StreamWriter(F1); w1.WriteLine("f" + k); w1.WriteLine(BaseOperations.Audio_files[num].name + " " + BaseOperations.Audio_files[num].hours + ":" + BaseOperations.Audio_files[num].min + ":" + BaseOperations.Audio_files[num].sec); w1.WriteLine(BaseOperations.Audio_files[num].hours + ":" + BaseOperations.Audio_files[num].min + ":" + BaseOperations.Audio_files[num].sec); w1.Close(); k++; i++; } return; } path += @"\f" + k; di = Directory.CreateDirectory(path); int w3 = 0; for (; i < no; i++) { source = Source; source += @"\" + (ans[w3].index) + ".mp3"; destination = path + @"\" + (ans[w3].index) + ".mp3"; System.IO.File.Copy(source, destination); w3++; } FileName += @"\f" + k + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); Audios tem = new Audios(); for (int j = 0; j < no; j++) { w.WriteLine(ans[j].name + " " + ans[j].hours + ":" + ans[j].min + ":" + ans[j].sec); tem.hours += ans[j].hours; tem.min += ans[j].min; tem.sec += ans[j].sec; } w.WriteLine(tem.hours + ":" + tem.min + ":" + tem.sec); k++; w.Close(); int var = 0; for (int it = 0; it < no; it++) { var = ans[it].index - 1 - h; if (var < 0) { var = 0; } BaseOperations.Audio_files.RemoveAt(var); h++; } BaseOperations.num_of_rec -= no; ans.Clear(); count = 0; MaxCount = 0; } }
static public void First_fit(string Source, string Destination) { BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); BaseOperations.SortInDecreasing(); string path = Destination; if (!Directory.Exists(path)) { DirectoryInfo di = Directory.CreateDirectory(path); } int k = 1; string FileName = path; string source = Source; string destination = ""; for (int i = 0; i < BaseOperations.num_of_rec; i++) { path = Destination; source = Source; destination = ""; FileName = path; int directoryCount = System.IO.Directory.GetDirectories(path).Length; long max = 0; int index = 0; bool test = true; Folder Temp_folder = new Folder(); if (directoryCount == 0) { path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; BaseOperations.Audio_Folders.Add(Temp_folder); source += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; System.IO.File.Move(source, destination); FileName += @"\f" + k + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; } else { for (int j = 0; j < directoryCount; j++) { if (BaseOperations.Audio_Folders[j].free_space >= BaseOperations.Audio_files[i].total_in_sec) { BaseOperations.Audio_Folders[j].hours += BaseOperations.Audio_files[i].hours; BaseOperations.Audio_Folders[j].min += BaseOperations.Audio_files[i].min; BaseOperations.Audio_Folders[j].sec += BaseOperations.Audio_files[i].sec; BaseOperations.Audio_Folders[j].free_space -= BaseOperations.Audio_files[i].total_in_sec; path += @"\f" + (j + 1); source += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; System.IO.File.Move(source, destination); FileName += @"\f" + (j + 1) + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); test = false; break; } } if (test) { path = Destination; source = Source; destination = ""; FileName = path; path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; BaseOperations.Audio_Folders.Add(Temp_folder); source += @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".mp3"; System.IO.File.Move(source, destination); FileName += @"\f" + k + "_MetaData" + ".txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; } } } int no = 0; FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt"; for (; no < k - 1; no++) { FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec); w.Close(); } }
/// <summary> /// The Complixty of Frist Fit is O(N^2) /// </summary> static public void First_fit(string Source, string Destination) { /// Initlaize the Prameters BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); /// Sorting the Files BaseOperations.SortInDecreasing(); //O(NlogN) string path = Destination; // Adding the Frist file if (!Directory.Exists(path)) { DirectoryInfo di = Directory.CreateDirectory(path); } int k = 1; string FileName = path; string source = Source; string destination = ""; for (int i = 0; i < BaseOperations.num_of_rec; i++) //O(N) { path = Destination; source = Source; destination = ""; FileName = path; int directoryCount = System.IO.Directory.GetDirectories(path).Length; long max = 0; int index = 0; bool test = true; Folder Temp_folder = new Folder(); if (directoryCount == 0) { /// Creating the Frist folder path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; // Satr el Folder El 5ayaly BaseOperations.Audio_Folders.Add(Temp_folder); // Real Transfering source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; // Copy mn El 5yaly to Real Folder System.IO.File.Copy(source, destination); /// Adding Data to Meta Data Files FileName += @"\f" + k + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; } else { for (int j = 0; j < directoryCount; j++) //O(N^2) { if (BaseOperations.Audio_Folders[j].free_space >= BaseOperations.Audio_files[i].total_in_sec) { // Zy Ely Foo2 BaseOperations.Audio_Folders[j].hours += BaseOperations.Audio_files[i].hours; BaseOperations.Audio_Folders[j].min += BaseOperations.Audio_files[i].min; BaseOperations.Audio_Folders[j].sec += BaseOperations.Audio_files[i].sec; BaseOperations.Audio_Folders[j].free_space -= BaseOperations.Audio_files[i].total_in_sec; path += @"\f" + (j + 1); source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; System.IO.File.Copy(source, destination); FileName += @"\f" + (j + 1) + "_MetaData.txt"; // Adding THe Remaning files in Folder System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); test = false; break; } } if (test) { // Adding in A new Folder w Zy El Frist Condition path = Destination; source = Source; destination = ""; FileName = path; path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; BaseOperations.Audio_Folders.Add(Temp_folder); source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; System.IO.File.Copy(source, destination); FileName += @"\f" + k + "_MetaData" + ".txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; } } } int no = 0; FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt"; for (; no < k - 1; no++) //O(N) { FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec); w.Close(); } }
/// <summary> /// The Avarge Complixty for worst_fit Priorty Queue Is O(NlogN) /// </summary> /// <param name="Source">Source of Data</param> /// <param name="Destination"> Destination of Data</param> static public void worst_fitp(string Source, string Destination) { // Initlaize The Prameters BaseOperations.Initlaize("AudiosInfo.txt", "readme.txt"); // O(N) PriorityQueue <Folder> PQ = new PriorityQueue <Folder>(); string path = Destination; if (!Directory.Exists(path)) { DirectoryInfo di = Directory.CreateDirectory(path); } int k = 1; string FileName = path; string source = Source; string destination = ""; for (int i = 0; i < BaseOperations.num_of_rec; i++) // O(N) { path = Destination; source = Source; destination = ""; FileName = path; int directoryCount = System.IO.Directory.GetDirectories(path).Length; //long max = 0; int index = 0; //bool test = false; Folder Temp_folder = new Folder(); if (directoryCount == 0) { // Adding The Frist Folder path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; Temp_folder.index = k; BaseOperations.Audio_Folders.Add(Temp_folder); PQ.Enqueue(Temp_folder); source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; System.IO.File.Copy(source, destination); FileName += @"\f" + k + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; index++; } else { if (PQ.Peek().free_space >= BaseOperations.Audio_files[i].total_in_sec) // O(n) { Folder temp = new Folder(); temp = PQ.Peek(); PQ.Dequeue(); // O(1) temp.hours += BaseOperations.Audio_files[i].hours; temp.min += BaseOperations.Audio_files[i].min; temp.sec += BaseOperations.Audio_files[i].sec; temp.free_space -= BaseOperations.Audio_files[i].total_in_sec; if (temp.free_space != 0) { PQ.Enqueue(temp); // O(nlogn) } // test = true; path += @"\f" + temp.index; source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; System.IO.File.Copy(source, destination); FileName += @"\f" + temp.index + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); } else { path += @"\f" + k; DirectoryInfo di = Directory.CreateDirectory(path); Temp_folder.index = k; Temp_folder.hours = BaseOperations.Audio_files[i].hours; Temp_folder.min = BaseOperations.Audio_files[i].min; Temp_folder.sec = BaseOperations.Audio_files[i].sec; Temp_folder.free_space = BaseOperations.max_size; Temp_folder.free_space -= BaseOperations.Audio_files[i].total_in_sec; BaseOperations.Audio_Folders.Add(Temp_folder); PQ.Enqueue(Temp_folder); source += @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; destination = path + @"\" + (BaseOperations.Audio_files[i].index) + ".AMR"; System.IO.File.Copy(source, destination); FileName += @"\f" + k + "_MetaData" + ".txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Create); StreamWriter w = new StreamWriter(F); w.WriteLine("f" + k); w.WriteLine(BaseOperations.Audio_files[i].name + " " + BaseOperations.Audio_files[i].hours + ":" + BaseOperations.Audio_files[i].min + ":" + BaseOperations.Audio_files[i].sec); w.Close(); k++; } } } int no = 0; FileName = Destination + @"\f" + (no + 1) + "_MetaData.txt"; for (; no < k - 1; no++) // O(n) { FileName = @"c:\Output\[1] FirstfitDecreasing\f" + (no + 1) + "_MetaData.txt"; System.IO.FileStream F = new FileStream(FileName, FileMode.Append); StreamWriter w = new StreamWriter(F); w.WriteLine(BaseOperations.Audio_Folders[no].hours + ":" + BaseOperations.Audio_Folders[no].min + ":" + BaseOperations.Audio_Folders[no].sec); w.Close(); } }