rakha asyrofi
/
KNN_coba4
mantap jaya
Revision 0:3d12bad4186e, committed 2018-04-15
- Comitter:
- asyrofi
- Date:
- Sun Apr 15 04:01:33 2018 +0000
- Commit message:
- bismillah bisa...
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Apr 15 04:01:33 2018 +0000 @@ -0,0 +1,82 @@ +#include<stdio.h> +#include "mbed.h" +#include "Serial.h" +Serial uart1(USBTX,USBRX); +/* Function to find the cross over point (the point before + which elements are smaller than or equal to x and after + which greater than x)*/ +int findCrossOver(int arr[], int low, int high, int x) +{ + // Base cases + if (arr[high] <= x) // x is greater than all + return high; + if (arr[low] > x) // x is smaller than all + return low; + + // Find the middle point + int mid = (low + high)/2; /* low + (high - low)/2 */ + + /* If x is same as middle element, then return mid */ + if (arr[mid] <= x && arr[mid+1] > x) + return mid; + + /* If x is greater than arr[mid], then either arr[mid + 1] + is ceiling of x or ceiling lies in arr[mid+1...high] */ + if(arr[mid] < x) + return findCrossOver(arr, mid+1, high, x); + + return findCrossOver(arr, low, mid - 1, x); +} + +// This function prints k closest elements to x in arr[]. +// n is the number of elements in arr[] +void printKclosest(int arr[], int x, int k, int n) +{ + // Find the crossover point + int l = findCrossOver(arr, 0, n-1, x); + int r = l+1; // Right index to search + int count = 0; // To keep track of count of elements already printed + + // If x is present in arr[], then reduce left index + // Assumption: all elements in arr[] are distinct + if (arr[l] == x) l--; + + // Compare elements on left and right of crossover + // point to find the k closest elements + while (l >= 0 && r < n && count < k) + { + if (x - arr[l] < arr[r] - x) + uart1.printf("%d ", arr[l--]); + else + uart1.printf("%d ", arr[r++]); + count++; + } + + // If there are no more elements on right side, then + // print left elements + while (count < k && l >= 0) + uart1.printf("%d ", arr[l--]), count++; + + // If there are no more elements on left side, then + // print right elements + while (count < k && r < n) + uart1.printf("%d ", arr[r++]), count++; +} + +/* Driver program to check above functions */ +int main() +{ + uart1.baud(9600); + wait(0.1); + int arr[] ={12, 16, 22, 30, 35, 39, 42, + 45, 48, 50, 53, 55, 56}; + int n = sizeof(arr)/sizeof(arr[0]); + int x = 35, k = 4; + printKclosest(arr, x, 4, n); + while(1) + { + wait(0.1); + uart1.printf("%d \n",printKclosest); + } + //return 0; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Apr 15 04:01:33 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4f6c30876dfa \ No newline at end of file