Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:07 [2020/11/12 12:27]
roxana_elena.stiuca chanded name
aa:lab:07 [2020/11/23 23:12] (current)
claudiu.dorobantu
Line 8: Line 8:
     {     {
         int i, j, temp;         int i, j, temp;
-        for(i = 0; i < n; i++)+        for(i = 0; i < n - 1; i++)
         {         {
-            for(j = 0; j < n-i-1; j++)+            for(j = 0; j < n - i - 1; j++)
             {             {
-                if( arr[j] > arr[j+1])+                if(arr[j] > arr[j + 1])
                 {                 {
                     // swap the elements                     // swap the elements
                     temp = arr[j];                     temp = arr[j];
-                    arr[j] = arr[j+1]; +                    arr[j] = arr[j + 1]; 
-                    arr[j+1] = temp;+                    arr[j + 1] = temp;
                 }                  } 
             }             }
Line 23: Line 23:
     }     }
  
-**1.2** Based on the following code for Insertion ​sort, analyze the algorithm'​s time complexity:​ +**1.2** Based on the following code for Selection ​sort, analyze the algorithm'​s time complexity:​ 
-    void insertionSort(int arr[], int n)  ​+    void selectionSort(int arr[], int n)  ​
     {  ​     {  ​
-        int i, key, j;   +        int i, j, min_idx, temp;   
-        for (i = 1; i < n; i++) +        for (i = 0; i < n - 1; i++) 
         {  ​         {  ​
-            ​key arr[i]  +            ​min_idx ​= i; 
-            j = i 1;   +            ​for (j = i 1; j < n; j++) 
-       +                if (arr[j< arr[min_idx]) 
-            /* Move elements of arr[0..i-1], that are  ​ +                    min_idx = j; 
-            ​greater than key, to one position ahead  ​ +             
-            ​of their current position *+            // swap the min element with the first element 
-            ​while (j >0 && ​arr[j> key)  +            ​temp = arr[min_idx]; 
-            ​{   +            arr[min_idx] = arr[i]; 
-                ​arr[j + 1] = arr[j];   +            arr[i] = temp;
-                j = j - 1;   +
-            }  ​ +
-            arr[j + 1] = key +
         }  ​         }  ​
     }     }
Line 48: Line 45:
  
 Consider the following search algorithm of a value v in a sorted array arr:  ​ Consider the following search algorithm of a value v in a sorted array arr:  ​
-    int search (int arr[], int lo, int hi, int v){ +    int search(int arr[], int lo, int hi, int v) 
-        int mid = (lo+hi)/​2;  ​+    ​
 +        int mid = (lo + hi) / 2;  ​
         if (arr[mid] == v)         if (arr[mid] == v)
             return mid;             return mid;
Line 59: Line 57:
             return search(arr, mid, hi, v);             return search(arr, mid, hi, v);
     }     }
 +
 **2.1** Determine the recurrence for the search algorithm above. **2.1** Determine the recurrence for the search algorithm above.
  
-**1.2** Solve the recurrence using the Master Method.+**2.2** Solve the recurrence using the Master Method. 
 + 
 +**2.3** Solve the recurrence using the Trees Method. 
 + 
 +**2.4** Solve the recurrence using the Substitution Method. 
 + 
 +==== 3. More recurrences ==== 
 + 
 +Consider the following modification to '​search'​ (which may not make sense in practice):​ 
 + 
 +    int search(int arr[], int lo, int hi, int v) 
 +    { 
 +        if (!is_sorted(arr,​ lo, hi)) 
 +            return -1; 
 +        int mid = (lo + hi) / 2;   
 +        if (arr[mid] == v) 
 +            return mid; 
 +        if (lo == hi) 
 +            return -1; 
 +        if (arr[mid] > v) 
 +            return search(arr, lo, mid, v); 
 +        else 
 +            return search(arr, mid, hi, v); 
 +    } 
 + 
 +**3.1** In what time can we check if an array is sorted? 
 + 
 +**3.2** What is the new recurrence for search? 
 + 
 +**3.3** Solve the recurrence, using all three methods. 
 + 
 +==== 4. Atypical situations when solving recurrences ==== 
 + 
 +**4.1** Substitution method does not work. Solve $math[T(n) = 2 T(] $math[n \over 2] $math[) + 1]. 
 + 
 +**4.2** Un-balanced trees. Solve via the tree and substitution methods: $math[T(n) = T(] $math[n \over 4] $math[) + T(] $math[3n \over 4] $math[) + n]. 
 + 
 +**4.3** Solve $math[T(n) = 2 T(] $math[n \over 2] $math[) + n ^ 2]. 
 + 
 +**4.4** Look up the Hanoi towers problem. Determine the number of steps necessary to solve it. 
 + 
 +**4.5** Consider the following algorithm:​ 
 + 
 +     int fibo(int n) 
 +     { 
 +        if (n <= 1) 
 +            return n; 
 +        return fibo(n - 1) + fibo(n - 2); 
 +     }
  
-**1.3** Solve the recurrence using the Trees Method.+Determine its complexity with regard to the size of the input.
  
-**1.4** Solve the recurrence using the Substitution Method.+**4.6** Solve $math[T(n) = \sqrt n * T(\sqrt n) + n].