{"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\/sl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Indeksirano binarno drevo","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Imel sem nalogo naslednje vrste. Potrebno je implementirati kontejner za shranjevanje podatkov, ki zagotavlja naslednjo funkcionalnost: <\/p>\n<p><\/p>\n<ul>\n<li>vstaviti nov element<\/li>\n<li>izbrisati element po vrstnem \u0161tevilu<\/li>\n<li>pridobiti element po vrstnem \u0161tevilu<\/li>\n<li>podatki se shranjujejo v urejenem stanju<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Podatki se nenehno dodajajo in odstranjujejo, struktura mora omogo\u010dati hitro delovanje. Sprva sem poskusil uresni\u010diti to z uporabo standardnih kontejnerjev iz <strong>std<\/strong>. Ta pot ni bila uspe\u0161na in dojel sem, da moram nekaj razviti sam. Edina misel, ki se je pojavila, je bila uporaba binarnega iskalnega drevesa. Ker zadostuje zahtevam po hitri vstavljanju, brisanju in shranjevanju podatkov v urejenem stanju. Ostalo je le \u0161e razmisliti, kako indeksirati vse elemente in ponovno izra\u010dunati indekse, ko se drevo spremeni.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {\n    data_t data;\n\n    uint64_t weight; \/\/ te\u017ea vozli\u0161\u010da\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>V \u010dlanku bo ve\u010d slik in teorije kot kode. Kode boste lahko videli prek povezave spodaj.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Te\u017ea<\/h2>\n<p><\/p>\n<p>Za to je drevo do\u017eivelo majhno modifikacijo, dodane so bile dodatne informacije o <strong>te\u017ei<\/strong> vozli\u0161\u010da. Te\u017ea vozli\u0161\u010da je <strong>\u0161tevilo potomcev tega vozli\u0161\u010da<\/strong> + <strong>1<\/strong> (te\u017ea enotnega elementa).<\/p>\n<p><\/p>\n<p>Funkcija za pridobitev te\u017ee vozli\u0161\u010da:<\/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>Pri listu je zato te\u017ea enaka <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Nato bomo pre\u0161li k vizualni predstavitvi takega drevesa. <strong>\u010crni<\/strong> barvi bo prikazan klju\u010d vozli\u0161\u010da (vrednost ne bo prikazana, ker to ni potrebno), <strong>rde\u010da<\/strong> \u2014 te\u017eo vozli\u0161\u010da, <strong>zelena<\/strong> \u2014 indeks vozli\u0161\u010da.<\/p>\n<p><\/p>\n<p>Ko je drevo prazno, je njegova te\u017ea enaka 0. Dodali bomo korenski element:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Te\u017ea drevesa postane 1, te\u017ea korenskega elementa 1. Te\u017ea korenskega elementa je te\u017ea drevesa.<\/p>\n<p><\/p>\n<p>Dodali bomo \u0161e nekaj elementov:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Vsaki\u010d, ko dodamo nov element, se spustimo po vozli\u0161\u010dih navzdol in pove\u010damo \u0161tevec te\u017ee vsakega prete\u010denega vozli\u0161\u010da. Pri ustvarjanju novega vozli\u0161\u010da mu dodelimo te\u017eo <strong>1<\/strong>. \u010ce vozli\u0161\u010de s takim klju\u010dem \u017ee obstaja, bomo prepisali vrednost in se vrnili nazaj do korena, pri \u010demer bomo razveljavili spremembe te\u017e in pri vseh vozli\u0161\u010dih, ki smo jih pre\u0161li.<br \/>\n\u010ce pride do brisanja vozli\u0161\u010da, se spustimo navzdol in dekrementiramo te\u017ee prete\u010denih vozli\u0161\u010d. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indeksi<\/h2>\n<p><\/p>\n<p>Zdajmo se k na\u010dinu indeksiranja vozli\u0161\u010d. Vozli\u0161\u010da o\u010ditno ne shranjujejo svojega indeksa, ta se izra\u010duna na podlagi te\u017ee vozli\u0161\u010d. \u010ce bi shranjevala svoj indeks, bi to zahtevalo <strong>O(n)<\/strong> \u010das, da se posodobijo indeksi vseh vozli\u0161\u010d po vsaki spremembi drevesa.<br \/>\nPoglejmo si vizualno predstavitev. Na\u0161e drevo je prazno, dodamo prvi vozli\u0161\u010de:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Prvo vozli\u0161\u010de ima indeks <strong>0<\/strong>, zdaj pa sta mo\u017ena dva primera. V prvem se indeks korenskega elementa spremeni, v drugem pa ne spremeni.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Korena leva poddrevesa tehta 1.<\/p>\n<p><\/p>\n<p>Drug primer:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Indeks korena se ni spremenil, saj je te\u017ea njegovega levega poddrevesa ostala 0.<\/p>\n<p><\/p>\n<p>Kako se izra\u010duna indeks vozli\u0161\u010da, je te\u017ea njegovega levega poddrevesa + \u0161tevilka, prenesena od star\u0161a. Kak\u0161na je ta \u0161tevilka?, To je \u0161tevec indeksov, sprva je enak <strong>0<\/strong>, ker koren nima star\u0161a. Naprej je vse odvisno od tega, ali se spu\u0161\u010damo v levega otroka ali desnega. \u010ce se spu\u0161\u010damo k levemu, se \u0161tevec ne pove\u010da. \u010ce k desnemu, pa pridamo indeks trenutnega vozli\u0161\u010da.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Indeksirano binarno drevo\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043a\u043b\u044e\u0447\u043e\u043c 8 (\u043f\u0440\u0430\u0432\u044b\u0439 \u0440\u0435\u0431\u0435\u043d\u043e\u043a \u043a\u043e\u0440\u043d\u044f). \u042d\u0442\u043e &#171;\u0418\u043d\u0434\u0435\u043a\u0441 \u043a\u043e\u0440\u043d\u044f&#187; + &#171;\u0432\u0435\u0441 \u043b\u0435\u0432\u043e\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0430 \u0443\u0437\u043b\u0430 \u0441 \u043a\u043b\u044e\u0447\u043e\u043c 8&#187; + &#171;1&#187; == 3 + 2 + 1 == <strong>6<\/strong><br \/>\n\u0418\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 \u043a\u043b\u044e\u0447\u043e\u043c 6 \u0431\u0443\u0434\u0435\u0442 &#171;\u0418\u043d\u0434\u0435\u043a\u0441 \u043a\u043e\u0440\u043d\u044f&#187; + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Zato, da pridobimo, odstranimo element po indeksu, je potrebno \u010das <strong>O(log n)<\/strong>, saj moramo najprej najti \u017eeleni element (se spustiti od korena do tega elementa).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Globina<\/h2>\n<p><\/p>\n<p>Na podlagi te\u017ee lahko izra\u010dunamo tudi globino drevesa. Potrebno za uravnote\u017eenje.<br \/>\nZa to je potrebno te\u017eo trenutnega vozli\u0161\u010da zaokro\u017eiti na prvo \u0161tevilo v potenci 2, ki je ve\u010dje ali enako tej te\u017ei in vzeti od njega binarni logaritem. Tako bomo dobili globino drevesa, ob predpostavki, da je uravnote\u017eeno. Drevo se uravnote\u017ei po vstavljanju novega elementa. Teorije o tem, kako uravnote\u017eiti drevesa, ne bom navajal. V izvornih kodah je predstavljena funkcija uravnote\u017eenja.<\/p>\n<p><\/p>\n<p>Koda za pretvorbo te\u017ee v globino.<\/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\">Zaklju\u010dki<\/h2>\n<p><\/p>\n<ul>\n<li>vstavljanje novega elementa poteka v <strong>O(log n)<\/strong><\/li>\n<li>odstranitev elementa po vrstnem \u0161tevilu poteka v <strong>O(log n)<\/strong><\/li>\n<li>pridobitev elementa po vrstnem \u0161tevilu poteka v <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Hitrostjo <strong>O(log n)<\/strong> pla\u010damo za to, da so vsi podatki shranjeni v urejenem formatu. <\/p>\n<p><\/p>\n<p>Kje bi tak\u0161na struktura lahko pri\u0161la prav \u2014 ne vem. Preprosto naloga, da se \u0161e enkrat razjasni, kako delujejo drevesa. Hvala za pozornost.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">Povezave<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">Izvorna koda drevesa<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Projekt vsebuje testne podatke za preverjanje hitrosti delovanja. Drevo se napolni <strong>1000000<\/strong> elementov. In potekajo zaporedno odstranjevanje, vstavljanje in pridobivanje elementov <strong>1000000<\/strong> krat. To pomeni <strong>3000000<\/strong> operacij. Rezultat se je izkazal za \u010disto dober ~ 8 sekund.<\/p>\n<p>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\udd47Indeksirano binarno drevo | ProHoster","description":"Zadela me je naloga naslednje vrste.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}