From f315daa186ce7c128a70d5803251af09614a2570 Mon Sep 17 00:00:00 2001 From: Nikolaj Date: Wed, 6 Oct 2021 15:13:42 +0200 Subject: [PATCH] :sparkles: coord_query --- A1/coord_query_kdtree | Bin 0 -> 32680 bytes A1/coord_query_kdtree.c | 119 ++++++++++++++++++++++++++++++++++++++++ A1/coord_query_naive | Bin 0 -> 31800 bytes A1/coord_query_naive.c | 31 +++++++++-- A1/euclidean_distance.h | 10 ++++ 5 files changed, 154 insertions(+), 6 deletions(-) create mode 100755 A1/coord_query_kdtree create mode 100644 A1/coord_query_kdtree.c create mode 100755 A1/coord_query_naive create mode 100644 A1/euclidean_distance.h diff --git a/A1/coord_query_kdtree b/A1/coord_query_kdtree new file mode 100755 index 0000000000000000000000000000000000000000..9f2db6c94f50caad34341a26b26e63b2dc578867 GIT binary patch literal 32680 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 Z8GUQe`D$Dt5+li9o01$YSpr!g`(MaUVom@6 literal 0 HcmV?d00001 diff --git a/A1/coord_query_kdtree.c b/A1/coord_query_kdtree.c new file mode 100644 index 0000000..fed49ef --- /dev/null +++ b/A1/coord_query_kdtree.c @@ -0,0 +1,119 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "record.h" +#include "euclidean_distance.h" +#include "coord_query.h" + +int lon_comp_func(const void* a, const void* b) { + return ( + ((struct record*)a)->lon - ((struct record*)b)->lon + ); +} + +int lat_comp_func(const void* a, const void* b) { + return ( + ((struct record*)a)->lat - ((struct record*)b)->lat + ); +} + +struct node { + struct record* record; + double point[2]; + int axis; + struct node* left; + struct node* right; +}; + +struct node* kdtree(struct record* points, int depth, int n) { + int axis = depth % 2; + + if (axis == 0) { + qsort(points, n, sizeof(struct record*), lon_comp_func); + } else { + qsort(points, n, sizeof(struct record*), lat_comp_func); + } + struct record* median = &points[n / 2]; + struct node* new_node = malloc(sizeof(struct node)); + new_node->record = median; + new_node->point[0] = median->lon; + new_node->point[1] = median->lat; + new_node->axis = axis; + if (n/2 != 0) { + new_node->left = kdtree(points, depth+1, n/2); + } else { + new_node->left = NULL; + } + if (n/2 + 1 <= n - 1) { + new_node->right = kdtree(&points[n/2 + 1], depth+1, n/2 - 1 + (n % 2)); + } else { + new_node->right = NULL; + } + + return new_node; +} + +struct node* mk_kdtree(struct record* rs, int n) { + struct node* data = kdtree(rs, 0, n); + + return data; +} + +void free_kdtree(struct node* data) { + if (data == NULL) { + return; + } + + struct node* left = data->left; + struct node* right = data->right; + + free_kdtree(left); + free_kdtree(right); +} + +void lookup(struct record* closest, double closest_dist, double query[2], struct node* tree) { + if (tree == NULL) { + return; + } + + double compare_coord[2] = {tree->point[0], tree->point[1]}; + double dist = calc_euclidean(query, compare_coord); + if (dist < closest_dist) { + closest = tree->record; + closest_dist = dist; + } + + double diff = tree->point[tree->axis] - query[tree->axis]; + + if (diff >= 0 || closest_dist > fabs(diff)) { + lookup(closest, closest_dist, query, tree->left); + } else if (diff <= 0 || closest_dist > fabs(diff)) { + lookup(closest, closest_dist, query, tree->right); + } + + return; +} + +const struct record* lookup_kdtree(struct node *data, double lon, double lat) { + struct record* closest = &(*data->record); + double compare_coord[2] = {data->point[0], data->point[1]}; + double query[2] = {lon, lat}; + double closest_dist = calc_euclidean(query, compare_coord); + + lookup(closest, closest_dist, query, data); + + return closest; +} + +int main(int argc, char** argv) { + return coord_query_loop(argc, argv, + (mk_index_fn)mk_kdtree, + (free_index_fn)free_kdtree, + (lookup_fn)lookup_kdtree); +} diff --git a/A1/coord_query_naive b/A1/coord_query_naive new file mode 100755 index 0000000000000000000000000000000000000000..daf5db9e396110992032070f043d07b8c07b5d71 GIT binary patch literal 31800 zcmeHwe|%KcweLAIvokZ9WM=Y{ga8?SBS;c{2th#;AUG%}DkxfX7?MdcC7DU*2STfo zf?Cr^n^tNKeyOwAGfdfULM*uXzQ=O*P^yce@eaBmsIOR?GJ8i&HJvk_nw>? zGUB`M^SSSjo0Ct@+H38#)?Rz%s%JrZP~ESW}1dR?8c=AVZ9}i(xfsPlPUqw zWHcJZIL|U>8U?@|Oq2Od5+GL|CvDl#rRa7*lB=S`IB<$28yad036fmCW56SGG&KAY zCpke$h3CT8Red$o`I+(>q#h#&HYsB?w91ihPOg%2CpTupv&t_)RevoGha z!!ybe8ft%%8T8+%^yR`PCh(`bVAoFYRPdw}&Ghp;maX5(Hz9sBm@lL4yMhk58P<)Q!AJaiiB#n27onb=0(Gf|dqTP{r zds}#q5l+S1=@g|?7xW}rI}=8GPa+yiwG%6b7OF(+?r^9*8Vh$tKOSMO?j8cr7f&D? zBT=iWV|N&qv?n4F1H^6`jh0cWRi-ZAuzvNL(Bitqbr%_#^omS!c_y`#d~D-E!iEvZ zh7pA@{YQBsgGs)E3@+Qp1YTvz@rlO4^yDapx&q@uMe7^p zbd1c=W1;&pRKwV9q5CcLUJJd%LchmCw~k{27J8Y5{{ah~;

vS?Cp-2zb~+ue8vQ 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 F{|7l(KK=jz literal 0 HcmV?d00001 diff --git a/A1/coord_query_naive.c b/A1/coord_query_naive.c index 9d27882..796af35 100644 --- a/A1/coord_query_naive.c +++ b/A1/coord_query_naive.c @@ -7,6 +7,7 @@ #include #include "record.h" +#include "euclidean_distance.h" #include "coord_query.h" struct naive_data { @@ -15,18 +16,36 @@ struct naive_data { }; struct naive_data* mk_naive(struct record* rs, int n) { - assert(0); - // TODO + struct naive_data* data = malloc(sizeof(struct naive_data*)); + data->rs = rs; + data->n = n; + + return data; } void free_naive(struct naive_data* data) { - assert(0); - // TODO + free(data); } const struct record* lookup_naive(struct naive_data *data, double lon, double lat) { - assert(0); - // TODO + double search_coords[2] = {lon, lat}; + struct record* closest_point = &data->rs[0]; + + double compare_coords[2] = {(closest_point)->lon, (closest_point)->lat}; + double dist = calc_euclidean(search_coords, compare_coords); + double closest_dist = dist; + + for (int i = 1 ; i < data->n ; i++) { + double compare_coords[2] = {(&data->rs[i])->lon, (&data->rs[i])->lat}; + double dist = calc_euclidean(search_coords, compare_coords); + + if (dist < closest_dist) { + closest_point = &data->rs[i]; + closest_dist = dist; + } + } + + return closest_point; } int main(int argc, char** argv) { diff --git a/A1/euclidean_distance.h b/A1/euclidean_distance.h new file mode 100644 index 0000000..a660bd3 --- /dev/null +++ b/A1/euclidean_distance.h @@ -0,0 +1,10 @@ +#ifndef EUCLIDEAN_DISTANCE_H +#define EUCLIDEAN_DISTANCE_H + +#include + +static double calc_euclidean(double coord_1[2], double coord_2[2]) { + return sqrt(pow((coord_1[0] - coord_2[0]),2) + pow((coord_1[1] - coord_2[1]),2)); +} + +#endif