{"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\/ro\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","title":{"rendered":"Arbore binar indexabil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/8ceb987e007db02de04d29f33185e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Am primit o sarcin\u0103 de acest tip. Este necesar s\u0103 implement\u0103m un container de stocare a datelor care s\u0103 ofere urm\u0103toarea func\u021bionalitate: <\/p>\n<p><\/p>\n<ul>\n<li>insera\u021bi un nou element<\/li>\n<li>\u0219terge\u021bi elementul dup\u0103 num\u0103rul de ordine<\/li>\n<li>ob\u021bine\u021bi elementul dup\u0103 num\u0103rul de ordine<\/li>\n<li>datele sunt stocate \u00een mod sortat<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Datele sunt ad\u0103ugate \u0219i \u0219terse constant, structura trebuie s\u0103 asigure o vitez\u0103 rapid\u0103 de lucru. La \u00eenceput am \u00eencercat s\u0103 implementez aceasta folosind containerele standard din <strong>std<\/strong>. Aceast\u0103 abordare nu a avut succes \u0219i am realizat c\u0103 trebuie s\u0103 implementez ceva de la zero. Singura idee care mi-a venit \u00een minte a fost s\u0103 folosesc un arbore binar de c\u0103utare. Deoarece acesta r\u0103spunde cerin\u021bei de inserare rapid\u0103, \u0219tergere \u0219i p\u0103strare a datelor \u00een mod sortat. A mai r\u0103mas doar s\u0103 g\u0103sim o modalitate de a indexa toate elementele \u0219i de a regenera indec\u0219ii atunci c\u00e2nd arborele se schimb\u0103.<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">struct node_s {    \n    data_t data;\n\n    uint64_t weight; \/\/ greutatea nodului\n\n    node_t *left;\n    node_t *right;\n\n    node_t *parent;\n};<\/code><\/pre>\n<p><\/p>\n<p>\u00cen articol vor fi mai multe imagini \u0219i teorie dec\u00e2t cod. Codul poate fi vizionat la linkul de mai jos.<\/p>\n<p><\/p>\n<h2 id=\"ves\">Greutate<\/h2>\n<p><\/p>\n<p>Pentru aceasta, arborele a suferit o mic\u0103 modificare, fiind ad\u0103ugat\u0103 o informa\u021bie suplimentar\u0103 despre <strong>greutate<\/strong> nodului. Greutatea nodului este <strong>num\u0103rul descenden\u021bilor acestui nod<\/strong> + <strong>1<\/strong> (greutatea unui element singular).<\/p>\n<p><\/p>\n<p>Func\u021bia de ob\u021binere a greut\u0103\u021bii nodului:<\/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>La frunz\u0103 greutatea este astfel <strong>0<\/strong>.<\/p>\n<p><\/p>\n<p>Apoi, s\u0103 trecem la o reprezentare vizual\u0103 a unui astfel de arbore. <strong>\u00cen negru<\/strong> culoarea va indica cheia nodului (valoarea nu va fi afi\u0219at\u0103, deoarece nu este necesar\u0103), <strong>\u00een ro\u0219u<\/strong> \u2014 greutatea nodului, <strong>\u00een verde<\/strong> \u2014 indicele nodului.<\/p>\n<p><\/p>\n<p>C\u00e2nd arborele este gol, greutatea sa este 0. S\u0103 ad\u0103ug\u0103m un element r\u0103d\u0103cin\u0103:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/2d4145039daee26582910556a40d2a5c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Greutatea arborelui devine 1, greutatea elementului r\u0103d\u0103cin\u0103 este 1. Greutatea elementului r\u0103d\u0103cin\u0103 este greutatea arborelui.<\/p>\n<p><\/p>\n<p>S\u0103 ad\u0103ug\u0103m \u00eenc\u0103 c\u00e2teva elemente:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/803cc4a65aa3d8a2fcb20fe325351cfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/0aa12f41b822b4bb1e9fadb7564dc461.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/8566df9404037e92f53b315bc3304016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/1847e6ddffdb28d0a6d9a4949ebb5f80.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De fiecare dat\u0103 c\u00e2nd se adaug\u0103 un nou element, cobor\u00e2m prin noduri \u0219i cre\u0219tem contorul greut\u0103\u021bii fiec\u0103rui nod parcurs. Atunci c\u00e2nd se creeaz\u0103 un nou nod, acesta prime\u0219te greutatea <strong>1<\/strong>. Dac\u0103 un nod cu aceast\u0103 cheie exist\u0103 deja, atunci vom suprascrie valoarea \u0219i ne vom \u00eentoarce la r\u0103d\u0103cin\u0103, anul\u00e2nd modific\u0103rile greut\u0103\u021bilor la toate nodurile pe care le-am parcurs.<br \/>\nDac\u0103 se \u0219terge un nod, atunci cobor\u00e2m \u0219i decrement\u0103m greut\u0103\u021bile nodurilor parcurse. <\/p>\n<p><\/p>\n<h2 id=\"indeksy\">Indec\u0219i<\/h2>\n<p><\/p>\n<p>Acum s\u0103 trecem la modul de a indexa nodurile. Nodurile nu p\u0103streaz\u0103 \u00een mod explicit indexul lor, acesta este calculat pe baza greut\u0103\u021bii nodurilor. Dac\u0103 ar p\u0103stra indexul, ar fi necesar <strong>O(n)<\/strong> timp pentru a actualiza indec\u0219ii tuturor nodurilor dup\u0103 fiecare modificare a arborelui.<br \/>\nS\u0103 trecem la o reprezentare vizual\u0103. Arborele nostru este gol, s\u0103 ad\u0103ug\u0103m primul nod:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/8a3b176f318cd077b1cf50ddf232e0da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Primul nod are indexul <strong>0<\/strong>, iar acum sunt posibile dou\u0103 cazuri. \u00cen primul, indexul elementului r\u0103d\u0103cin\u0103 se va schimba, \u00een al doilea nu se va schimba.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/cb863be8f42385d3bbb2f46700a8cff3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>R\u0103d\u0103cina are un subarbore st\u00e2ng cu greutatea 1.<\/p>\n<p><\/p>\n<p>Al doilea caz:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/35eec59a81fc8b056c7e91daa3ee508e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Indexul r\u0103d\u0103cinii nu s-a schimbat, deoarece greutatea subarborelui s\u0103u st\u00e2ng a r\u0103mas 0.<\/p>\n<p><\/p>\n<p>Cum se calculeaz\u0103 indexul unui nod, este greutatea subarborelui s\u0103u st\u00e2ng + num\u0103rul transmis de p\u0103rintele s\u0103u. Ce este acest num\u0103r? Este un contor de indec\u0219i, ini\u021bial acesta este <strong>0<\/strong>, deoarece r\u0103d\u0103cina nu are p\u0103rinte. Mai departe, totul depinde de direc\u021bia \u00een care cobor\u00e2m, fie la copilul st\u00e2ng, fie la cel drept. Dac\u0103 mergem la st\u00e2ng, atunci contorul nu se mai m\u0103re\u0219te. Dac\u0103 mergem la dreapta, ad\u0103ug\u0103m indexul nodului curent.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arbore binar indexabil\" src=\"\/wp-content\/uploads\/2019\/12\/d328174370ef52c646d8689cce977302.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De exemplu, cum se calculeaz\u0103 indicele elementului cu cheia 8 (copilul din dreapta al r\u0103d\u0103cinii). Este \u201eIndicele r\u0103d\u0103cinii\u201d + \u201egreutatea subarborelui st\u00e2ng al nodului cu cheia 8\u201d + \u201e1\u201d == 3 + 2 + 1 == <strong>6<\/strong><br \/>\nIndicele elementului cu cheia 6 va fi \u201eIndicele r\u0103d\u0103cinii\u201d + 1 == 3 + 1 == <strong>4<\/strong><\/p>\n<p><\/p>\n<p>Prin urmare, pentru a ob\u021bine sau a \u0219terge un element dup\u0103 index, este necesar timpul <strong>O(log n)<\/strong>, deoarece pentru a ob\u021bine elementul dorit, mai \u00eent\u00e2i trebuie s\u0103-l g\u0103sim (s\u0103 cobor\u00e2m de la r\u0103d\u0103cin\u0103 p\u00e2n\u0103 la acest element).<\/p>\n<p><\/p>\n<h2 id=\"glubina\">Ad\u00e2ncimea<\/h2>\n<p><\/p>\n<p>Pe baza greut\u0103\u021bii se poate calcula \u0219i ad\u00e2ncimea arborelui. Este necesar\u0103 pentru echilibrare.<br \/>\nPentru aceasta, greutatea nodului curent trebuie rotunjit\u0103 la prima putere de 2 care este mai mare sau egal\u0103 cu greutatea dat\u0103 \u0219i s\u0103 lu\u0103m logaritmul binar al acesteia. Astfel, vom ob\u021bine ad\u00e2ncimea arborelui, cu condi\u021bia ca acesta s\u0103 fie echilibrat. Arborele se echilibreaz\u0103 dup\u0103 ad\u0103ugarea unui nou element. Nu voi prezenta teoria despre cum s\u0103 echilibrezi arborii. \u00cen codurile surs\u0103 este prezentat\u0103 func\u021bia de echilibrare.<\/p>\n<p><\/p>\n<p>Codul pentru convertirea greut\u0103\u021bii \u00een ad\u00e2ncime.<\/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\">Concluzii<\/h2>\n<p><\/p>\n<ul>\n<li>Ad\u0103ugarea unui nou element se realizeaz\u0103 \u00een <strong>O(log n)<\/strong><\/li>\n<li>\u0219tergerea unui element dup\u0103 num\u0103rul s\u0103u de ordine se realizeaz\u0103 \u00een <strong>O(log n)<\/strong><\/li>\n<li>ob\u021binerea unui element dup\u0103 num\u0103rul s\u0103u de ordine se realizeaz\u0103 \u00een <strong>O(log n)<\/strong><\/li>\n<\/ul>\n<p><\/p>\n<p>Viteza <strong>O(log n)<\/strong> o pl\u0103tim pentru faptul c\u0103 toate datele sunt p\u0103strate \u00eentr-o form\u0103 sortat\u0103. <\/p>\n<p><\/p>\n<p>Nu \u0219tiu unde ar putea fi util\u0103 o astfel de structur\u0103. Este pur \u0219i simplu o sarcin\u0103 pentru a \u00een\u021belege cum func\u021bioneaz\u0103 arborii. Mul\u021bumesc pentru aten\u021bie.<\/p>\n<p><\/p>\n<h2 id=\"ssylki\">Linkuri<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dvjdjvu\/bntree\">Codul surs\u0103 al arborilor<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Proiectul con\u021bine date de test pentru a verifica viteza de func\u021bionare. Arborele este umplut <strong>1000000<\/strong> de elemente. \u0218i se efectueaz\u0103 \u0219tergeri, inser\u021bii \u0219i ob\u021bineri secven\u021biale ale elementelor <strong>1000000<\/strong> de ori. Adic\u0103 <strong>3000000<\/strong> opera\u021biuni. Rezultatul s-a dovedit a fi destul de bun ~ 8 secunde.<\/p>\n<p>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Arbore binar indexabil | ProHoster","description":"Am \u00eent\u00e2lnit o sarcin\u0103 de acest tip.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/indeksiruemoe-binarnoe-derevo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/54389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=54389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=54389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=54389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=54389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}