From 1ee9e169991c5770b8873a3d98d715e66eef9860 Mon Sep 17 00:00:00 2001 From: Nikolaj Date: Mon, 4 Oct 2021 16:10:46 +0200 Subject: [PATCH] :sparkles: binsort yeah --- A1/id_query_binsort | Bin 0 -> 31640 bytes A1/id_query_binsort.c | 71 ++++++++++++++++++++++++++++++++++++++++++ A1/id_query_naive | Bin 27024 -> 26912 bytes 3 files changed, 71 insertions(+) create mode 100755 A1/id_query_binsort create mode 100644 A1/id_query_binsort.c diff --git a/A1/id_query_binsort b/A1/id_query_binsort new file mode 100755 index 0000000000000000000000000000000000000000..6a0c562660af7cb8e60b2b75e82c2722f0675f3e GIT binary patch literal 31640 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 +#include +#include +#include +#include +#include +#include +#include + +#include "record.h" +#include "id_query.h" + +struct index_record { + int64_t osm_id; + const struct record* record; +}; + +struct indexed_data { + struct index_record* irs; + int n; +}; + +int comp_func(const void* a, const void* b) { + return ( + ((struct index_record*)a)->osm_id - ((struct index_record*)b)->osm_id + ); +} + +struct indexed_data* mk_indexed(struct record* rs, int n) { + struct index_record irs[n]; + for (int i = 0 ; i < n ; i++) { + struct record* rec = &rs[i]; + struct index_record irec = { .osm_id = rec->osm_id, .record = rec }; + irs[i] = irec; + } + struct indexed_data* data = malloc(sizeof(struct indexed_data*)); + qsort(&irs, n, sizeof(struct index_record), comp_func); + + data->irs = irs; + data->n = n; + return data; +} + +void free_indexed(struct indexed_data* data) { + free(data); +} + +const struct record* lookup_indexed(struct indexed_data *data, int64_t needle) { + int bottom = 0; + int top = data->n; + while (top >= bottom) { + int mid = bottom + ((top - bottom) / 2); + if ((&data->irs[mid])->osm_id < needle) { + bottom = mid + 1; + } + else if ((&data->irs[mid])->osm_id > needle) { + top = mid - 1; + } + else if ((&data->irs[mid])->osm_id == needle) { + return (&data->irs[mid])->record; + } + } + return NULL; +} + +int main(int argc, char** argv) { + return id_query_loop(argc, argv, + (mk_index_fn)mk_indexed, + (free_index_fn)free_indexed, + (lookup_fn)lookup_indexed); +} diff --git a/A1/id_query_naive b/A1/id_query_naive index 196a4e4f3a9a9cb9dcb0fc955468bfb06bec1bf5..47304c5d686de873a7279a49eea6a255388b82c7 100755 GIT binary patch delta 1085 zcmYjPTWDNW6y5vWdEZVZ(_|)dGmo2@Bur9u(tJp)PMf(+lb+Dzqs^m9loD)hQYt>` zi%Kz?_+S_YCmaNkK??T6;!n~WVL*@(X-k7usbZv1sehvt;uw{xE!TbTB&GY~oU_+D zd#$}Wr|=z~y@rL3rj}{A7a4d2ypVx5XkF~R;=bssF&A||zQP*+`@DGQ(z%#7@oDbmw5JaC9`1|JlkI>nSzxO zu^R2b9bzN8d#=LhR`zmyL!hktd?)3 zD~}VK1JXKVYGuEmRtkKf?Bcn4p0nSGo1PDk-{01Gswg2z^W50&WBh@}_6|y3v{y1j zT>0{N%BQ|*8iP;Gz=kjOuXcDSzdIKL(8dR|KWJmkgW12dQ7wCCjOQOZL-@#0=Uu+= zo2&A!cuk$xe^*`1y>izu8p*az$3zaJ>vROIuKsP-=XFTGvTaTm>?5d1jl3_;x9-QX zUTy92U`das;u4EXVwnZ?sqPz|*5{l6c0kvl1Q2vk(Y6p(`RU+~&_WRxQ|WeW60fHd z7}7sV+ZZbP$9pCjHVdW=Y!9bw0QK$Os2xB$Nd*xxrG+snUe*d26VAP(s=7un^Vm(c zZ&TK4nsO{=#H)Mfck_$iyf>igY{FuCp@a6y} z6>I(w2ZKZte>@&sgUc{WHEM z;iM2l28&IK4~BQhr{?Y5u7cey`9IXJ4f`G90#n3Jn@x|5KEZHFKRxb5da5@L&md;R zFB3g%o#~0mkWd`KDNu|LlN_yw9{SqD&&(HL@Kk2K14~k{V)_5(8 zit0=c{wX?Vd+`NvVm7(BWE0=dHu`Ul)Gn0Gx2H&me`dSztmr(^>s~oh!;XvYC)NJ} DmT)%e delta 1145 zcmYjPYfM{Z82;XKdg$d)+Cs1NMu7@qEFxPF?FMJ1@-+b^;j%%@>;PNL2qqibjQfGW zHdC7>C12((B%1hV{xO@!n40;c#0%h(&7gCdc!`-YO=hwn(R7C8_@1^iyg$D0yzg_K z%Xhx>-WFuPg>0*1C{F&bUh)Jnl3o%d%_}{d`kSUQa#Oaz8O~atxV^gN8Cf~{O!1ww zv-UssfBB(VUgf_w>c(map&8?^@|>dkW=*wee9~Y72NE1?}3FMIV7dlbGVVhvwtbd9XDzeXzDAP5w2Ch66^Rx>mx)Oi>1DoMq?@G-_nSb+8w2t zM`v+9Jn-;+y8NfEu)ya0OCL29LI1^lMX{piJ{cO*-~}Glq#E-DE@G_Wce!e$hk`UjU5+b?)lZsmyK1mW5m zKSn!lC5}KqemRoW3|SypQz!C%x8DM_TC;-?yNQS*A&zF;4vM^v5T~8+HBX99iQPDN z*`UP*b%fN1NRR8myu}r(3%k_#$Ea2GgrEWm>^OB9UISOS#PP8keIAQn1l5d?1`$Tl zF(BvZEgmM>TLX&DHZGXw1>br0_F!AhOG`qBE-P3*6ZCv-gM59^Qe{VL{OA}9OT+lP z8qG!F4FNC3&mPlgGbaBAT+_+O~3QfN-c`Et*iMizL ziznw#vPDC`9FNC&IK|ec+Vva$k}}zl?@jgd5M@%bOaE@9JnUqP*lp2r_Yhl4c0rNd zOZLDS);-e#3HDpUp}##`#vN=iUJAvgXRH=7Ql9439|fz4rDob8&pw^$(SLWeJUh)` G(*GZV@kF%%