//Button: Worst-fit decreasing algorithm using Linear Search. //Overall Complexity: First for loop(𝞱(N))+Max(Merge Sort(O(N log N)),Second for loop(𝞱(N*M))+Create(𝞱(1))+MetaData(𝞱(N+M))+Copy(𝞱(N+M))) =.O(Max(N log N,N*M)). private void button4_Click(object sender, EventArgs e) { Stopwatch StpW = Stopwatch.StartNew(); Names_Durations list = new Names_Durations(); for (int i = 0; i < durations.Count; i++)//First for loop:𝞱(N) { list.name.Add(names[i]); list.duration.Add(durations[i]); } Names_Durations NewList = MergeSort(list);//O(N log N) List <folder> folders = new List <folder>(); folder tempfolder = new folder(); tempfolder.folder_name = "F1"; tempfolder.totalremainduration = duration_each_folder - NewList.duration[0]; tempfolder.number_files = 1; tempfolder.files_names.Add(NewList.name[0]); tempfolder.files_Durations.Add(NewList.duration[0]); folders.Add(tempfolder); for (int i = 1; i < NewList.duration.Count; i++) //Overall Complexity of the Second for loop:𝞱(N*M),Number of the iteration=N { int max_folder_index = maxfolder(folders); //𝞱(M) if (NewList.duration[i] <= folders[max_folder_index].totalremainduration) //𝞱(1) { folders[max_folder_index].totalremainduration -= NewList.duration[i]; folders[max_folder_index].files_names.Add(NewList.name[i]); folders[max_folder_index].files_Durations.Add(NewList.duration[i]); folders[max_folder_index].number_files++; } else//𝞱(1) { folder tempfolder2 = new folder(); tempfolder2.folder_name = "F" + (folders.Count + 1).ToString(); tempfolder2.totalremainduration = duration_each_folder - NewList.duration[i]; tempfolder2.files_names.Add(NewList.name[i]); tempfolder2.files_Durations.Add(NewList.duration[i]); tempfolder2.number_files = 1; folders.Add(tempfolder2); } } string FolderName = "[2] WorstFit Decreasing"; Create(FolderName); //𝞱(1) METADATA(folders); //𝞱(N+M) StpW.Stop(); MessageBox.Show(StpW.Elapsed.ToString()); Copy(folders);//𝞱(N+M) MessageBox.Show("Done !"); }
//folder filling algorithm /* * -complexity of exactlySum 𝞱(N*D) * -exactlySum is called inside while loop when there is more audios * -overall of folder filling of while loop inside folder filling button * -complexity 𝞱(D*N^2) * -Where D is duration of each folder and N is number of audio files */ private void button10_Click(object sender, EventArgs e) { Stopwatch StpW = Stopwatch.StartNew(); Names_Durations obj = new Names_Durations(); for (int i = 0; i < durations.Count; i++)//𝞱(N) { obj.name.Add(names[i]); obj.duration.Add(durations[i]); } List <folder> folders = new List <folder>(); while (true) //O(N^2*D) { if (obj.duration.Count == 0) { break; //𝞱(1) } Names_Durations answer = exactlySum(ref obj, obj.duration.Count, (int)duration_each_folder); //𝞱(N*D) if (answer.duration.Count == 0) { break; //𝞱(1) } folder tempfolder2 = new folder(); tempfolder2.folder_name = "F" + (folders.Count + 1).ToString(); tempfolder2.totalremainduration = 0; tempfolder2.totalremainduration = duration_each_folder; for (int i = 0; i < answer.duration.Count; i++)//O(N) { tempfolder2.files_names.Add(answer.name[i]); tempfolder2.files_Durations.Add(answer.duration[i]); tempfolder2.totalremainduration -= answer.duration[i]; } folders.Add(tempfolder2); } string FolderName = "[4] FolderFilling"; Create(FolderName); METADATA(folders);//𝞱(N+M) StpW.Stop(); MessageBox.Show(StpW.Elapsed.ToString()); Copy(folders); //𝞱(N+M) MessageBox.Show("Done !"); }
//Button: Worst-fit algorithm using Linear Search. //Overall complexity: for loop(𝞱(N*M))+Create(𝞱(1))+MetaData(𝞱(N+M))+Copy(𝞱(N+M)) = O(N*M). private void button2_Click(object sender, EventArgs e) { Stopwatch StpW = Stopwatch.StartNew(); List <folder> folders = new List <folder>(); folder tempfolder = new folder(); tempfolder.folder_name = "F1"; tempfolder.totalremainduration = duration_each_folder - durations[0]; tempfolder.number_files = 1; tempfolder.files_names.Add(names[0]); tempfolder.files_Durations.Add(durations[0]); folders.Add(tempfolder); for (int i = 1; i < durations.Count; i++) //Overall Complexity:𝞱(N*M),Number of the iteration=N { int max_folder_index = maxfolder(folders); //𝞱(M) if (durations[i] <= folders[max_folder_index].totalremainduration) //𝞱(1) { folders[max_folder_index].totalremainduration -= durations[i]; folders[max_folder_index].files_names.Add(names[i]); folders[max_folder_index].files_Durations.Add(durations[i]); folders[max_folder_index].number_files++; } else//𝞱(1) { folder tempfolder2 = new folder(); tempfolder2.folder_name = "F" + (folders.Count + 1).ToString(); tempfolder2.totalremainduration = duration_each_folder - durations[i]; tempfolder2.files_names.Add(names[i]); tempfolder2.files_Durations.Add(durations[i]); tempfolder2.number_files = 1; folders.Add(tempfolder2); } } string FolderName = "[1] WorstFit"; Create(FolderName); //𝞱(1) METADATA(folders); //𝞱(N+M) StpW.Stop(); MessageBox.Show(StpW.Elapsed.ToString()); Copy(folders);//𝞱(N+M) MessageBox.Show("Done !"); }
//--------------------------------------------------------------------------------------------------------------------------------------- //5.First-fit decreasing algorithm using Linear Search. --------------------------------------------------------------------------------- //Button: First-fit decreasing algorithm using Linear Search. /*Overall Complexity: First for loop(𝞱 (N))+ 𝞱 (Max(Merge(O(N log N)),Second for loop(𝞱(N*M))))+Create(𝞱(1))+METADATA(𝞱(N+M))+Copy(𝞱(N+M)) = * =𝞱 (Max(Merge(𝞱(N log N)),Second for loop(𝞱(N*M)))) = O(Max(N log N,N*M)).*/ private void button9_Click(object sender, EventArgs e) { Stopwatch StpW = Stopwatch.StartNew(); Names_Durations list = new Names_Durations(); for (int i = 0; i < durations.Count; i++)//First for loop:𝞱 (N) { list.name.Add(names[i]); list.duration.Add(durations[i]); } Names_Durations NewList = MergeSort(list);//O(N log N) List <folder> folders = new List <folder>(); folder folder1 = new folder(); folder1.folder_name = "F1"; folder1.totalremainduration = duration_each_folder - NewList.duration[0]; folder1.number_files = 1; folder1.files_names.Add(NewList.name[0]); folder1.files_Durations.Add(NewList.duration[0]); folders.Add(folder1); for (int i = 1; i < NewList.duration.Count; i++)//Secong for loop:𝞱(N*M),Number of iteration= N { bool flag = false; for (int j = 0; j < folders.Count; j++) //𝞱(M),Number of iteration M { if (NewList.duration[i] <= folders[j].totalremainduration) //𝞱(1) { folders[j].totalremainduration -= NewList.duration[i]; folders[j].files_names.Add(NewList.name[i]); folders[j].files_Durations.Add(NewList.duration[i]); folders[j].number_files++; flag = true; break; } } if (flag == false)//𝞱(1) { folder New_folder = new folder(); New_folder.folder_name = "F" + (folders.Count + 1).ToString(); New_folder.totalremainduration = duration_each_folder - NewList.duration[i]; New_folder.files_names.Add(NewList.name[i]); New_folder.files_Durations.Add(NewList.duration[i]); New_folder.number_files = 1; folders.Add(New_folder); flag = true; } } string FolderName = "[3] FirstFit Decreasing"; Create(FolderName); //𝞱(1) METADATA(folders); //𝞱(N+M) StpW.Stop(); MessageBox.Show(StpW.Elapsed.ToString()); Copy(folders);//𝞱(N+M) MessageBox.Show("Done !"); }