{"id":54389,"date":"2019-12-25T00:00:00","date_gmt":"2019-12-24T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/indeksiruemoe-binarnoe-derevo"},"modified":"2020-02-18T14:02:23","modified_gmt":"2020-02-18T11:02:23","slug":"indeksiruemoe-binarnoe-derevo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Indekseret bin\u00e6rt tr\u00e6","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jeg har f\u00e5et en opgave af f\u00f8lgende art. Det er n\u00f8dvendigt at implementere en datalagringscontainer, der sikrer f\u00f8lgende funktionalitet: <\/p>\n<p><\/p>\n<ul>\n<li>inds\u00e6tte et nyt element<\/li>\n<li>fjerne et element efter dets r\u00e6kkenummer<\/li>\n<li>hente et element efter dets r\u00e6kkenummer<\/li>\n<li>data opbevares i sorteret r\u00e6kkef\u00f8lge<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Data bliver konstant tilf\u00f8jet og fjernet, s\u00e5 strukturen skal sikre hurtig drift. I starten pr\u00f8vede jeg at implementere noget ved hj\u00e6lp af standardcontainere fra <strong>std<\/strong>. Denne vej f\u00f8rte ikke til succes, og det blev klart, at jeg m\u00e5tte implementere noget selv. Det eneste, der kom til at t\u00e6nke p\u00e5, var at bruge et bin\u00e6rt s\u00f8getr\u00e6. Da det opfylder kravene til hurtig inds\u00e6ttelse, fjernelse og opbevaring af data i sorteret r\u00e6kkef\u00f8lge. Det var kun n\u00f8dvendigt at finde ud af, hvordan man indekserer alle elementerne og genberegner indekserne, n\u00e5r tr\u00e6et \u00e6ndrer sig.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ v\u00e6gt af noden\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>Artiklen vil indeholde flere billeder og teori end kode. Koden kan ses via linket nedenfor.<\/p>\n<p><\/p>\n<h2 id=\"ves\">V\u00e6gt<\/h2>\n<p><\/p>\n<p>For dette blev tr\u00e6et udsat for en lille modification, hvor der blev tilf\u00f8jet yderligere information om <strong>v\u00e6gten<\/strong> af noden. V\u00e6gten af noden er <strong>antallet af efterkommere af denne node<\/strong> + <strong>1<\/strong> (v\u00e6gt af en enkelt element).<\/p>\n<p><\/p>\n<p>Funktionen til at f\u00e5 v\u00e6gten af noden:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">uint64_t bntree::get_child_weight(node_t *node) {\n    if (node) {\n        return node-&gt;weight;\n    }\n\n    return 0;\n}<\/code><\/pre>\n<p><\/p>\n<p>For et blad er v\u00e6gten derfor <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Lad os forts\u00e6tte med at vise et eksempel p\u00e5 et s\u00e5dant tr\u00e6. <strong>I sort<\/strong> vil n\u00f8glen for noden blive vist (v\u00e6rdien vises ikke, da der ikke er behov for det), <strong>i r\u00f8dt<\/strong> \u2014 v\u00e6gten af noden, <strong>i gr\u00f8nt<\/strong> \u2014 indekset af noden.<\/p>\n<p><\/p>\n<p>N\u00e5r tr\u00e6et er tomt, er dets v\u00e6gt 0. Lad os tilf\u00f8je rod elementet:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>V\u00e6gten af tr\u00e6et bliver 1, v\u00e6gten af rod elementet er 1. V\u00e6gten af rod elementet er v\u00e6gten af tr\u00e6et.<\/p>\n<p><\/p>\n<p>Lad os tilf\u00f8je et par flere elementer:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hver gang vi tilf\u00f8jer et nyt element, g\u00e5r vi ned gennem noderne og \u00f8ger v\u00e6gtt\u00e6lleren for hver node, vi passerer. N\u00e5r et nyt noden oprettes, tildeles det en v\u00e6gt <strong>1<\/strong>. Hvis en node med denne n\u00f8gle allerede findes, opdaterer vi v\u00e6rdien og g\u00e5r tilbage til roden, mens vi annullerer \u00e6ndringerne af v\u00e6gten for alle de noder, vi har passeret.<br \/>\nHvis der sker sletning af en node, g\u00e5r vi ned og dekremeterer v\u00e6gten af de noder, vi passerer. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indekser<\/h2>\n<p><\/p>\n<p>Lad os nu se p\u00e5, hvordan vi indekserer noder. Noderne gemmer tydeligvis ikke deres indeks; det beregnes baseret p\u00e5 noderne v\u00e6gt. Hvis de gemte deres indeks, ville det kr\u00e6ve <strong>O(n)<\/strong> meget tid at opdatere indeksene for alle noder efter hver \u00e6ndring i tr\u00e6et.<br \/>\nLad os g\u00e5 videre til en visuel repr\u00e6sentation. Vores tr\u00e6 er tomt; lad os tilf\u00f8je den f\u00f8rste node:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Den f\u00f8rste node har indekset <strong>0<\/strong>, og nu er der to mulige scenarier. I det f\u00f8rste vil indekset af roden \u00e6ndre sig, i det andet ikke.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Rodens venstre undertr\u00e6 vejer 1.<\/p>\n<p><\/p>\n<p>Andet tilf\u00e6lde:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Rodens indeks er ikke \u00e6ndret, da v\u00e6gten af dens venstre undertr\u00e6 forblev 0.<\/p>\n<p><\/p>\n<p>Hvordan indeks skal beregnes for en node, det er v\u00e6gten af dens venstre undertr\u00e6 + det tal, der er givet fra for\u00e6lderen. Hvad er dette tal? Det er t\u00e6lleren for indekser, der oprindeligt er lig med <strong>0<\/strong>, da roden ikke har nogen for\u00e6lder. Derefter afh\u00e6nger alt af, hvor vi bev\u00e6ger os hen: til venstre barn eller h\u00f8jre. Hvis vi g\u00e5r til venstre, tilf\u00f8jes der ikke noget til t\u00e6lleren. Hvis vi g\u00e5r til h\u00f8jre, tilf\u00f8jer vi indeks for den nuv\u00e6rende node.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indekseret bin\u00e6rt tr\u00e6\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>For eksempel, hvordan beregnes indekset for elementet med n\u00f8gle 8 (h\u00f8jre barn af roden). Det er \"Rodens indeks\" + \"v\u00e6gt af venstre undertr\u00e6 for noden med n\u00f8gle 8\" + \"1\" == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nIndekset for elementet med n\u00f8gle 6 vil v\u00e6re \"Rodens indeks\" + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Tilsvarende kr\u00e6ver det tid at f\u00e5 eller slette et element efter indeks <strong>O(log n)<\/strong>, fordi for at f\u00e5 det \u00f8nskede element skal vi f\u00f8rst finde det (g\u00e5 fra roden til dette element).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Dybde<\/h2>\n<p><\/p>\n<p>Baseret p\u00e5 v\u00e6gten kan man ogs\u00e5 beregne dybden af tr\u00e6et. Dette er n\u00f8dvendigt for at opn\u00e5 balance.<br \/>\nFor dette skal v\u00e6gten af den aktuelle node rundes op til det f\u00f8rste tal i eksponenten 2, som er st\u00f8rre end eller lig med den givne v\u00e6gt, og tage den bin\u00e6re logaritme af det. P\u00e5 denne m\u00e5de f\u00e5r vi dybden af tr\u00e6et, forudsat at det er balanceret. Tr\u00e6et balanceres efter inds\u00e6ttelsen af et nyt element. Jeg vil ikke g\u00e5 ind i teorien om, hvordan man balancerer tr\u00e6er. Funktionen til at balancere er pr\u00e6senteret i kildekoderne.<\/p>\n<p><\/p>\n<p>Kode til konvertering af v\u00e6gt til dybde.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">\/*\n * \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 2, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u043e\u0432\u043d\u043e x\n *\/\nuint64_t bntree::cpl2(uint64_t x) {\n    x = x - 1;\n    x = x | (x &gt;&gt; 1);\n    x = x | (x &gt;&gt; 2);\n    x = x | (x &gt;&gt; 4);\n    x = x | (x &gt;&gt; 8);\n    x = x | (x &gt;&gt; 16);\n    x = x | (x &gt;&gt; 32);\n\n    return x + 1;\n}\n\n\/*\n * \u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c \u043e\u0442 \u0447\u0438\u0441\u043b\u0430\n *\/\nlong bntree::ilog2(long d) {\n    int result;\n    std::frexp(d, &amp;result);\n    return result - 1;\n}\n\n\/*\n * \u0412\u0435\u0441 \u043a \u0433\u043b\u0443\u0431\u0438\u043d\u0435\n *\/\nuint64_t bntree::weight_to_depth(node_t *p) {\n    if (p == NULL) {\n        return 0;\n    }\n\n    if (p-&gt;weight == 1) {\n        return 1;\n    } else if (p-&gt;weight == 2) {\n        return 2;\n    }\n\n    return this-&gt;ilog2(this-&gt;cpl2(p-&gt;weight));\n}<\/code><\/pre>\n<p><\/p>\n<h2 id=\"itogi\">Resum\u00e9<\/h2>\n<p><\/p>\n<ul>\n<li>Inds\u00e6ttelse af et nyt element sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<li>Sletning af et element efter r\u00e6kkef\u00f8lge sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<li>Hentning af et element efter r\u00e6kkef\u00f8lge sker p\u00e5 <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Hastighed <strong>O(log n)<\/strong> betaler vi for, at alle data opbevares i sorteret form. <\/p>\n<p><\/p>\n<p>Hvor en s\u00e5dan struktur kan v\u00e6re nyttig - ved jeg ikke. Det er bare en \u00f8velse for at forst\u00e5, hvordan tr\u00e6er fungerer. Tak for opm\u00e6rksomheden.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">Links<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">Kildekoden til tr\u00e6et<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Projektet indeholder testdata til at kontrollere hastigheden. Tr\u00e6et udfyldes <strong>1000000<\/strong> elementer. Og der sker en sekventiel sletning, inds\u00e6ttelse og hentning af elementer <strong>1000000<\/strong> gange. Det vil sige <strong>3000000<\/strong> operationer. Resultatet viste sig at v\u00e6re ganske godt ~ 8 sekunder.<\/p>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/481372\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b: \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u0435\u0449\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0437 std. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-54389","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-24T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Indekseret bin\u00e6rt tr\u00e6 | ProHoster","description":"Jeg st\u00f8dte p\u00e5 en opgave af f\u00f8lgende art.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e | ProHoster","og:description":"\u041f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-24T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54389","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 11:11:41","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:07:24","updated":"2026-01-24 11:11:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}