Exercise 1.1

Suppose you have a group of n numbers and would like to determine the
_k_th largest.
Write a program to solve the selection problem. Let k = n/2.

**
100 1000 10000 100000
Algorithm-1 0.001 0.005 0.251 26.741
Algorithm-2 0.001 0.004 0.077 6.734

Algorithm-1

  1. //Exercise 1.1 :
  2. //Write a program to solve the selection problem. Let k = n/2.
  3. //Draw a table showing the running time of your program for various values of n.
  4. #include<iostream>
  5. #include<ctime>
  6. #include<fstream>
  7. #include<random>
  8. using namespace std;
  9. int arr[100010];
  10. void BubleSort(int arr[], int length)
  11. {
  12. for (int i = length - 1; i != 0; --i) { //sort in decreasing order
  13. for (int j = 0; j != i; ++j) {
  14. if (arr[j] < arr[j + 1]) {
  15. int temp = arr[j];
  16. arr[j] = arr[j + 1];
  17. arr[j + 1] = temp;
  18. }
  19. }
  20. }
  21. }
  22. int main()
  23. {
  24. ifstream in("test.txt");
  25. ofstream out("test.txt");
  26. uniform_int_distribution<unsigned> u(0, 200000);
  27. default_random_engine e;
  28. for (size_t i = 0; i < 100000; ++i) {
  29. out << u(e) << " "; //write random unsigned integer into the file
  30. }
  31. int N, num;
  32. cin >> N; //determine the number of elements to test
  33. int k = N / 2;
  34. clock_t t; //timing
  35. t = clock();
  36. for (int i = 0; i != N; ++i) {
  37. in >> num; //read random unsigned interger from the file
  38. arr[i] = num;
  39. }
  40. BubleSort(arr, N);
  41. cout << arr[k - 1] << endl;
  42. t = clock() - t;
  43. cout << "It took " << static_cast<float>(t) / CLOCKS_PER_SEC << " seconds" << endl; //output the running time
  44. return 0;
  45. }

Algorithm-2

  1. //Exercise 1.1 :
  2. //Write a program to solve the selection problem. Let k = n/2.
  3. //Draw a table showing the running time of your program for various values of n.
  4. #include<iostream>
  5. #include<ctime>
  6. #include<fstream>
  7. #include<random>
  8. using namespace std;
  9. int arr[100010];
  10. void BubleSort(int arr[], int length)
  11. {
  12. for (int i = length - 1; i != 0; --i) { //sort in decreasing order
  13. for (int j = 0; j != i; ++j) {
  14. if (arr[j] < arr[j + 1]) {
  15. int temp = arr[j];
  16. arr[j] = arr[j + 1];
  17. arr[j + 1] = temp;
  18. }
  19. }
  20. }
  21. }
  22. int main()
  23. {
  24. ifstream in("test.txt");
  25. ofstream out("test.txt");
  26. uniform_int_distribution<unsigned> u(0, 200000);
  27. default_random_engine e;
  28. for (size_t i = 0; i < 100000; ++i) {
  29. out << u(e) << " "; //write random unsigned integer into the file
  30. }
  31. int N, num;
  32. cin >> N; //determine the number of elements to test
  33. int k = N / 2;
  34. clock_t t; //timing
  35. t = clock();
  36. for (int i = 0; i != k; ++i) {
  37. in >> num;
  38. arr[i] = num;
  39. }
  40. BubleSort(arr, k);
  41. int temp = k;
  42. while (temp--) {
  43. in >> num;
  44. if (num <= arr[k - 1]) continue;
  45. else {
  46. for (int i = k - 2; i >= 0; --i) {
  47. if (arr[i] >= num) {
  48. for(int j = k - 1;j != i + 1;--j) {
  49. arr[j] = arr[j - 1];
  50. }
  51. arr[i + 1] = num;
  52. break;
  53. }
  54. }
  55. }
  56. }
  57. cout << arr[k - 1] << endl;
  58. t = clock() - t;
  59. cout << "It took " << static_cast<float>(t) / CLOCKS_PER_SEC << " seconds" << endl; //output the running time
  60. return 0;
  61. }

Exercise 1.2

image.pngimage.pngAlgorithm

  1. //Exercise 1.2 :
  2. //Write a program to solve the word puzzle problem.
  3. #include<iostream>
  4. #include<vector>
  5. #include<string>
  6. #include<algorithm>
  7. using namespace std;
  8. int change_x[8] = { 1,1,0,-1,-1,-1,0,1 }; //change x,y location
  9. int change_y[8] = { 0,1,1,1,0,-1,-1,-1 };
  10. vector<vector<char>> list; //letter list
  11. vector<string> dict; //dictionary
  12. int main()
  13. {
  14. int dict_n, table_n;
  15. string word;
  16. char letter;
  17. cin >> dict_n; //input the number of words in dictionary
  18. while (dict_n--) {
  19. cin >> word;
  20. dict.push_back(word);
  21. }
  22. cin >> table_n; //input the dimension of letter list
  23. list.resize(table_n);
  24. for (int i = 0; i != table_n; ++i) {
  25. for (int j = 0; j != table_n; ++j) {
  26. cin >> letter;
  27. list[i].push_back(letter);
  28. }
  29. }
  30. for (int i = 0; i != table_n; ++i) { //traverse the letter list
  31. for (int j = 0; j != table_n; ++j) {
  32. for (int k = 0; k != 8; ++k) { //traverse the change_x/change_y array
  33. string s;
  34. int x = i;
  35. int y = j;
  36. for (int l = 0; l != table_n; ++l) { //deep search until out of range->break
  37. s += list[x][y];
  38. x += change_x[k];
  39. y += change_y[k];
  40. if (find(dict.cbegin(), dict.cend(), s) != dict.cend())
  41. cout << s << endl;
  42. if (x < 0 || x >= table_n || y < 0 || y >= table_n) break;
  43. }
  44. }
  45. }
  46. }
  47. return 0;
  48. }